Mise en veille prolongée en utilisant HQL Named requêtes dans Grails?
-
27-10-2019 - |
Question
Y at-il un moyen d'utiliser Hibernate requêtes nommées dans Grails, en utilisant HQL?
J'ai lu à leur sujet dans le Harnessing Hibernate livre , et se demande si il y avait un moyen de les utiliser dans Grails.
requêtes nommées sont inclus, ainsi que les mises en correspondance de classe, dans un fichiers de mappage <class-name>.hbm.xml
comme ceci:
<query name="com.oreilly.hh.tracksNoLongerThan">
<![CDATA[
from Track as track
where track.playTime <= :length
]>
</query>
Maintenant, je suis certain qu'un <class-name>.hbm.xml
fichier de mappage veille prolongée peuvent être inclus et intégré dans la configuration Grails GORM comme il est indiqué ici que le hibernate.cfg.xml
qui comprend les mise en veille prolongée fichier de mappage peut être utilisé dans les Grails.
Dans la vieille Hibernate et Java, il est possible d'accéder ainsi:
...
Query query = session.getNamedQuery(
"com.oreilly.hh.tracksNoLongerThan");
query.setTime("length", length);
return query.list();
...
Mais, comment peut-on accéder à ces requêtes HQL nommées de Grails?
La raison pour laquelle je demande est que je voudrais être en mesure de prendre une base de données existante et la carte à certains objets utilisés dans Grails et stocker les requêtes nommées ainsi que les correspondances.
La solution
The easiest way is with the withSession
method on any domain class, e.g.
SomeDomainClass.withSession { session ->
Query query = session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
query.setTime 'length', length
query.list()
}
or more compactly using method chaining:
SomeDomainClass.withSession { session ->
session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
.setTime('length', length)
.list()
}