Grails 외부에서 GORM을 사용하기위한 POC를 만들려고합니다. 나는 groovy-gradle 독립 실행 형 플러그인을 만들었습니다. 나는 official docs을 따라 갔고 은 클래스에서 내 사용자 도메인에 count()
이라는 쿼리를 만들었습니다. gradle run
명령을 사용하여 응용 프로그램을 실행하면이 오류를 건너 왔어요 동안 :Grails 외부에서 GORM을 사용하는 중에 세션을 찾을 수 없습니다.
Exception in thread "main" org.springframework.dao.DataAccessResourceFailureException: Could not obtain current Hibernate Session; nested exception is org.hibernate.HibernateException: No Session found for current thread
at org.grails.orm.hibernate.GrailsHibernateTemplate.getSession(GrailsHibernateTemplate.java:317)
at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:273)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:230)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:116)
at org.grails.orm.hibernate.AbstractHibernateGormStaticApi.count(AbstractHibernateGormStaticApi.groovy:151)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.count(GormEntity.groovy:620)
at org.grails.datastore.gorm.GormEntity$Trait$Helper$count.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at com.foo.user.User.count(User.groovy)
at com.foo.user.User$count.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
at com.foo.utils.EntityInitializerUtils.initializeDomains(EntityInitializerUtils.groovy:45)
at com.foo.utils.EntityInitializerUtils.initializeDomains(EntityInitializerUtils.groovy:21)
at com.foo.utils.EntityInitializerUtils$initializeDomains.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at com.foo.Application.main(Application.groovy:15)
Caused by: org.hibernate.HibernateException: No Session found for current thread
at org.grails.orm.hibernate.GrailsSessionContext.currentSession(GrailsSessionContext.java:116)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:688)
at org.grails.orm.hibernate.GrailsHibernateTemplate.getSession(GrailsHibernateTemplate.java:315)
나는이 문제를 재현 Github repo을 만들었습니다. 새 트랜잭션 관리자에서 동적 쿼리 호출을 래핑하는 것과 같은 몇 가지 솔루션을 시도했지만이 오류를 해결하기 위해 DB 구성을 수정했습니다. 어리석은 뭔가를 놓쳐 버렸을 것입니다.하지만 아직 이해할 수 없었습니다.
Thnax Jeff. 그건 내 바보 같았 어. –
전혀 바보가 아닙니다. 당신에게 해결책이 주어서 다행입니다. https://github.com/ankit-agrawal11/hibernate-gorm-poc/pull/1의 PR은 Grails 외부에서 GORM Data Services를 사용하는 것이 얼마나 쉬운지를 보여줍니다. 필자는 명령형'.withNewSession'을 선호합니다. –
예, 동의합니다. 고맙습니다. –