是否可以使用HQL在Grails中使用Hibernate命名查询?
我一直在Harnessing Hibernate book阅读它们,并想知道是否有办法在Grails中使用它们。
在<class-name>.hbm.xml
映射文件中包含了命名查询以及类映射,如下所示:
<query name="com.oreilly.hh.tracksNoLongerThan">
<![CDATA[
from Track as track
where track.playTime <= :length
]>
</query>
现在我确定可以将<class-name>.hbm.xml
hibernate映射文件包含在Grails GORM配置中,并将其hibernate.cfg.xml
...
Query query = session.getNamedQuery(
"com.oreilly.hh.tracksNoLongerThan");
query.setTime("length", length);
return query.list();
...
整合到其中{{1}} hibernate映射文件可以在Grails中使用。
在旧的Hibernate和Java中,可以通过这种方式访问它:
{{1}}
但是,如何从Grails访问这些HQL命名查询?
我问的原因是我希望能够获取旧数据库并将其映射到某些对象以便在Grails中使用,并将命名查询与映射一起存储。
答案 0 :(得分:5)
最简单的方法是在任何域类上使用withSession
方法,例如
SomeDomainClass.withSession { session ->
Query query = session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
query.setTime 'length', length
query.list()
}
或更紧凑地使用方法链接:
SomeDomainClass.withSession { session ->
session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
.setTime('length', length)
.list()
}