有没有办法使用HQL在Grails中使用hibernate命名查询?
我已经在《利用hibernate》一书中阅读了有关它们的内容,想知道是否有办法在Grails中使用它们。
<class-name>.hbm.xml像这样的映射文件中包含命名查询以及类映射:
<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,包含 hibernate映射文件的 可以在Grails中使用。
hibernate.cfg.xml
在旧的Hibernate和Java中,可以通过以下方式访问它:
... Query query = session.getNamedQuery( "com.oreilly.hh.tracksNoLongerThan"); query.setTime("length", length); return query.list(); ...
但是,如何从Grails访问这些以HQL命名的查询?
我问的原因是我希望能够使用旧数据库并将其映射到在Grails中使用的某些对象,并将命名查询与映射一起存储。
最简单的方法是使用withSession任何域类上的方法,例如
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() }