【问题标题】:Using Hibernate HQL Named Queries in Grails?在 Grails 中使用 Hibernate HQL 命名查询?
【发布时间】:2012-02-08 02:46:19
【问题描述】:

有没有办法在 Grails 中使用 HQL 来使用 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>

现在我确定 &lt;class-name&gt;.hbm.xml hibernate 映射文件 可以作为 it is stated here 包含并集成到 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 中使用,并将命名查询与映射一起存储。

【问题讨论】:

标签: hibernate grails hql grails-orm named-query


【解决方案1】:

最简单的方法是在任何域类上使用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()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多