В Hibernate я могу сделать:Как получить прокручиваемые результаты с помощью Gorm DetachedCriteria?
// dc - DetachedCriteria
ScrollableResults sr = dc.getExecutableCriteria(getSession()).scroll()
Но как сделать то же самое с Gorm DetachedCriteria?
DomainName.withSession { session ->
DomainName.where {
// predicates
}.getExecutableCriteria(session).scroll()
}
Код выше не будет работать, потому что метод не существует.
Обновлено: Я нашел это решение:
def hiberSession = Holders.grailsApplication.mainContext.sessionFactory.currentSession
def hiberDc = HibernateCriteriaBuilder.getHibernateDetachedCriteria(null, gormDc)
def sr = hiberDc.getExecutableCriteria(hiberSession).scroll()
Но исходящее SQL не имеет столбцов в запросе:
select from domain_name where ... ;
Обновлено: я вырыл глубже и нашли решение для предыдущей проблемы.
hiberDc.setProjection(null)
Почему это происходит?
Когда вы передаете свои обособленные критерии (Горм), чтобы getHibernateDetachedCriteria
и ваши отдельные критерии не имеют выступов, то новые отдельные критерии (спящий режим) будет иметь пустой список проекций вместо null
- proof.
Ну, что из этого?
Hibernate ожидает null
в projection
для создания всех столбцов себя - proof
Две ноты. Во-первых, в зависимости от того, где находится ваш код, вы, вероятно, можете пропустить первую строку и просто добавить свойство «def sessionFactory», чтобы включить sessionFactory в ваш объект. 2-й в зависимости от типа вашего запроса это может не сработать, в настоящее время я получаю NPE на линии HibernateCriteriaBuilder.java 222 [grails-datastore-gorm-hibernate4-5.0.1.RELEASE.jar: na] – Robert
Спасибо за заметки. Можете ли вы показать свой запрос, который вызывает NPE? – AndreyT
Конечно, это действительно ясно. Поскольку комментарии короткие, я сбрасывал небольшой интеграционный тест на github - https://github.com/rrsIPOV/gormDc101/blob/master/src/integration-test/groovy/gormDc/DetCritToDetCritIntSpec.groovy, gormDetachedCriteria.list() метод работает нормально, но код выше не работает/NPE (grails 3.1.1) – Robert