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

时间:2012-01-11 18:13:53

标签: hibernate grails hql gorm named-query

是否可以使用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中使用,并将命名查询与映射一起存储。

1 个答案:

答案 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()
}