2014-12-31 5 views
4

В Грааль, у меня есть класс домена и может быть запрошен в BootStap.groovyHibernateException: Нет сеансы найдены для текущего потока, когда GORM запрос перемещен в другой класс домена

def xref = AppXref.find{user_nm == 'john'} 

Однако после того, как я переехал в коде метод другого класса домена I будет иметь следующую ошибку.

Servlet.service() for servlet [default] in context with path [/myapp] threw exception 
Message: Could not obtain current Hibernate Session; nested exception is org.hibernate.HibernateException: No Session found for current thread 

Вот мой спящий режим конфигурации в Config.groovy

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = false 
// cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3 
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4 
    singleSession = true // configure OSIV singleSession mode 
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context 
} 

Я изменил cache.use_query_cache к истине. Но это не имело значения.

ответ

6

методы класса домена НЕ являются транзакционными, так что вы должны убедиться, что они вызываются в TX-контексте: либо поставить их в службе, или использовать .withTransaction{}

+0

Спасибо. Теперь он работает безупречно. – johnsam

+2

Каково было решение? –

+0

Извините, но для ответа или для оригинального комментария к автоответчику очень сложно определить, как применить решение. – Pere

5

Добавление @Transactional на метод работал для меня ,

+1

Это правильный ответ, потому что это самое простое решение проблемы. – jerryb

Смежные вопросы