在Grails中使用Hibernate HQL命名查询?

有没有办法使用HQL在Grails中使用hibernate命名查询?

我已经在《利用hibernate》一书中阅读了有关它们的内容,想知道是否有办法在Grails中使用它们。

<class-name>.hbm.xml像这样的映射文件中包含命名查询以及类映射:

<query name="com.oreilly.hh.tracksNoLongerThan">

<![CDATA[

from Track as track

where track.playTime <= :length

]>

</query>

现在,我确定可以包含一个<class-name>.hbm.xmlhibernate映射文件, 并将其集成到Grails

GORM配置中,因为在此声明hibernate.cfg.xml,包含

hibernate映射文件的 可以在Grails中使用。

在旧的Hibernate和Java中,可以通过以下方式访问它:

    ...

Query query = session.getNamedQuery(

"com.oreilly.hh.tracksNoLongerThan");

query.setTime("length", length);

return query.list();

...

但是,如何从Grails访问这些以HQL命名的查询?

我问的原因是我希望能够使用旧数据库并将其映射到在Grails中使用的某些对象,并将命名查询与映射一起存储。

回答:

最简单的方法是使用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()

}

以上是 在Grails中使用Hibernate HQL命名查询? 的全部内容, 来源链接: utcz.com/qa/404146.html

回到顶部