質問

HQLを使用して、GrailsでHibernateという名前のクエリを使用する方法はありますか?

私はそれらについて読んでいます Hibernate Bookを利用しています, 、そして、聖杯でそれらを使用する方法があるかどうか疑問に思いました。

名前のクエリは、クラスマッピングとともに、 <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とJavaでは、このようにアクセスできます。

    ...
Query query = session.getNamedQuery(
                "com.oreilly.hh.tracksNoLongerThan");

query.setTime("length", length);
return query.list();
    ...

しかし、どのようにして、これらの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()
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top