Verwenden von Hibernate HQL -benannten Abfragen in Grails?
-
27-10-2019 - |
Frage
Gibt es eine Möglichkeit, Hibernate -benannte Abfragen in Grails mit HQL zu verwenden?
Ich habe über sie in der gelesen Hibernate -Buch nutzen, und fragte sich, ob es eine Möglichkeit gab, sie in Grals zu verwenden.
Benannte Abfragen sind zusammen mit den Klassenzuordnungen in a enthalten <class-name>.hbm.xml
Zuordnen von Dateien wie SO:
<query name="com.oreilly.hh.tracksNoLongerThan">
<![CDATA[
from Track as track
where track.playTime <= :length
]>
</query>
Jetzt bin ich mir sicher, dass ein <class-name>.hbm.xml
Hibernate -Mapping -Datei Kann in die GRAILS GORM -Konfiguration eingeschlossen und integriert werden Es wird hier angegeben dass die hibernate.cfg.xml
welches die Hibernate -Mapping -Datei kann innerhalb von Grals eingesetzt werden.
In Old Hibernate und Java kann auf diese Weise zugegriffen werden:
...
Query query = session.getNamedQuery(
"com.oreilly.hh.tracksNoLongerThan");
query.setTime("length", length);
return query.list();
...
Aber wie kann man auf diese von HQL benannten Abfragen von Grails zugreifen?
Der Grund, warum ich frage, ist, dass ich gerne eine Legacy -Datenbank nehmen und einige Objekte für die Verwendung in Grails zuordnen und die benannten Abfragen zusammen mit den Zuordnungen speichern kann.
Lösung
Der einfachste Weg ist mit dem withSession
Methode in jeder Domänenklasse, z. B.
SomeDomainClass.withSession { session ->
Query query = session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
query.setTime 'length', length
query.list()
}
oder kompakte Verwendung von Methodenverkettung:
SomeDomainClass.withSession { session ->
session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
.setTime('length', length)
.list()
}