Использование Hibernate HQL с именем запросов в Граале?
-
27-10-2019 - |
Вопрос
Есть ли способ использовать Hibernate с именем запросов в Граале, используя HQL?
Я читал о них в Использовать книгу с гибернатом, и подумал, есть ли способ использовать их в Граале.
Названные запросы включены вместе с классовыми отображениями в <class-name>.hbm.xml
отображение файлов как SO:
<query name="com.oreilly.hh.tracksNoLongerThan">
<![CDATA[
from Track as track
where track.playTime <= :length
]>
</query>
Теперь я уверен, что <class-name>.hbm.xml
Файл отображения гиберната может быть включен и интегрирован в конфигурацию Grails Gorm как это указано здесь что hibernate.cfg.xml
который включает в себя Файл отображения гиберната может использоваться в Граале.
В старом спячке и 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()
}