Usando Hibernate HQL Chiamato Elaborato in Grails?
-
27-10-2019 - |
Domanda
C'è un modo per utilizzare Hibernate Named Query in Grails, utilizzando HQL?
Ho letto su di loro nel Sfruttare Hibernate libro , e si chiese se c'era un modo di utilizzarli in Grails.
query denominate sono inclusi, insieme con le mappature di classe, in un <class-name>.hbm.xml
file di mapping in questo modo:
<query name="com.oreilly.hh.tracksNoLongerThan">
<![CDATA[
from Track as track
where track.playTime <= :length
]>
</query>
Ora sono certo che un <class-name>.hbm.xml
file di mapping Hibernate possono essere inclusi e integrati nella configurazione Grails GORM come si afferma qui che il hibernate.cfg.xml
che comprende il ibernazione file di mapping può utilizzato entro Grails.
Nella vecchia Hibernate e Java si può accedere in questo modo:
...
Query query = session.getNamedQuery(
"com.oreilly.hh.tracksNoLongerThan");
query.setTime("length", length);
return query.list();
...
Ma, come si può accedere a questi HQL denominate query da Grails?
Il motivo che mi chiedo è che vorrei essere in grado di prendere un database legacy e la mappa di alcuni oggetti per l'uso in Grails, e memorizzare le query denominate con le mappature.
Soluzione
Il modo più semplice è con il metodo withSession
su qualsiasi classe di dominio, per esempio.
SomeDomainClass.withSession { session ->
Query query = session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
query.setTime 'length', length
query.list()
}
o in modo più compatto con il metodo concatenamento:
SomeDomainClass.withSession { session ->
session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan')
.setTime('length', length)
.list()
}