是否可以在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查询...我们失去了使用映射的好处:-)