是否可以在Hibernate中使用解析函数?

时间:2020-03-05 18:56:26  来源:igfitidea点击:

有没有一种方法可以像Hibernate中的分析函数一样使用sql-server?

就像是

select foo from Foo foo where f.x = max(f.x) over (partition by f.y)

解决方案

回答

我们正在执行本机SQL查询。

如果使用的是JPA,则语法为:

Query q = em.createNativeQuery("select foo.* from Foo foo " +
                               "where f.x = max(f.x) over " +
                               "(partition by f.y)", Foo.class);

如果需要返回多种类型,请查看SQLResultSetMapping批注。

如果我们直接使用Hibernate API,请执行以下操作:

Query q = session.createSQLQuery("select {foo.*} from Foo foo " +
                                 "where f.x = max(f.x) over "+
                                 "(partition by f.y)");
q.addEntity("foo", Foo.class);

见10.4.4. 有关更多详细信息,请参见Hibernate文档中的本机SQL查询。

在这两个API中,我们都可以使用setParameter正常传递参数。

回答

另一种方法是使用映射。请参阅本文:https://forums.hibernate.org/viewtopic.php?f=1&t=998482

我反对在Hibernate中使用本机SQL查询...我们失去了使用映射的好处:-)