GrailsでHibernate HQLという名前のクエリを使用していますか?
-
27-10-2019 - |
質問
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()
}
所属していません StackOverflow