Java独立(控制台)应用程序-org.hibernate.LazyInitializationException:无法初始化代理-无会话

Java独立(控制台)应用程序-org.hibernate.LazyInitializationException:无法初始化代理-无会话,java,spring,hibernate,console-application,Java,Spring,Hibernate,Console Application,我搜索了所有StackOverflow站点和Google,99.9%的问题都是关于web应用程序的,但我没有找到Java独立应用程序(在Linux终端“Java-jar myApp.jar”中运行)的经典异常“org.hibernate.lazyiInitializationException:无法初始化代理-无会话”的任何解决方案 我的项目使用Spring4.0.7+Hibernate4.3.6.Final+Log4J1.2.17+BoneCP0.8.0 我尝试了以下解决方案: @客户端类和客

我搜索了所有StackOverflow站点和Google,99.9%的问题都是关于web应用程序的,但我没有找到Java独立应用程序(在Linux终端“Java-jar myApp.jar”中运行)的经典异常“org.hibernate.lazyiInitializationException:无法初始化代理-无会话”的任何解决方案

我的项目使用Spring4.0.7+Hibernate4.3.6.Final+Log4J1.2.17+BoneCP0.8.0

我尝试了以下解决方案:

  • @客户端类和客户端类调用的类中的服务和@Transactional注释
  • @客户端类中的服务和@Transactional(propagation=propagation.REQUIRED)注释,以及客户端类所属的类中的注释
  • 从@服务切换到@组件,并重试上述第1项和第2项
  • 尝试在TransactionCallback.doInTransaction()方法中使用TransactionTemplate并执行client.start()方法
  • 我已尝试从客户端类中删除@Service和@Transactional,并从客户端类调用的类中删除
  • 我已经尝试了所有这些,但仍然得到org.hibernate.LazyInitializationException:无法初始化代理-没有会话

    代码中的注释也是我尝试过的

    重要提示:项目使用Facade类,该类包含应用程序使用的所有方法

    Spring配置由以下XML加载:

    <beans> <context:annotation-config /> <context:component-scan base-package="com.mycompany" /> <context:property-placeholder location="classpath:persistence.properties" /> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- BoneCP --> <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="idleConnectionTestPeriodInMinutes" value="60"/> <property name="idleMaxAgeInMinutes" value="240"/> <property name="maxConnectionsPerPartition" value="30"/> <property name="minConnectionsPerPartition" value="10"/> <property name="partitionCount" value="3"/> <property name="acquireIncrement" value="5"/> <property name="statementsCacheSize" value="100"/> <property name="releaseHelperThreads" value="3"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="com.mycompany.domain.entity" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.default_schema">${hibernate.default_schema}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop> <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop> <!-- I have tried setting "current_session_context_class", but still getting "org.hibernate.LazyInitializationException: could not initialize proxy - no Session" --> <!-- <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> --> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> <property name="dataSource" ref="dataSource" /> </bean> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager"/> </bean> <bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> <bean id="client" class="com.mycompany.console.Client" /> </beans> 门面等级(ABDomain):

    注册类别:

    
    
        package com.mycompany.domain.registry;
    
        @Component
        @Transactional
        public class Registry {
    
            private static ApplicationContext applicationContext;
    
            @Autowired(required = true)
            public Registry(ApplicationContext appContext) {
                applicationContext = appContext;
            }
    
            public static UserDao getUserDao() {
                return applicationContext.getBean(UserDao.class);
            }
        }
    
    
    编辑:

    添加堆栈跟踪以更好地理解

    注:

    • ABDomain是应用程序外观(如上所述)
    • Inbox是客户端类调用的另一个类
    org.springframework.orm.hibernate4.HibernateSystemException:无法初始化代理-无会话;嵌套异常为org.hibernate.LazyInitializationException:可能 未初始化代理-无会话 位于org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:216) 位于org.springframework.orm.hibernate4.HibernateExceptionTranslator.convertHibernateAccessException(HibernateExceptionTranslator.java:57) 在org.springframework.orm.hibernate4.HibernateExceptionTranslator.translateExceptionIffailable上(HibernateExceptionTranslator.java:44) 在org.springframework.dao.support.ChainedPersistenceExceptionTranslator.TranslateExceptionIfEnabled(ChainedPersistenceExceptionTranslator.java:59) 位于org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 位于org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上 位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 位于com.sun.proxy.$Proxy120.findLastPosition(未知源) 位于com.mycompany.domain.facade.ABDomain.findLastPosition(ABDomain.java:832) 在com.mycompany.domain.facade.ABDomain$$FastClassBySpringCGLIB$$f56e1d49.invoke()上 位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)上 位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:262) 位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上 位于org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 在com.mycompany.domain.facade.ABDomain$$EnhancerBySpringCGLIB$$4c071cee.findLastPosition()上 在com.mycompany.cpr.client.Inbox.updateLastPosition(Inbox.java:714)上 在com.mycompany.cpr.client.Inbox.processMessage(Inbox.java:604)上 位于com.mycompany.cpr.client.Inbox$3.run(Inbox.java:934) 运行(Thread.java:745) 原因:org.hibernate.LazyInitializationException:无法初始化代理-无会话 位于org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) 位于org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286) 位于org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) 在com.mycompany.domain.entity.Vehicle\u$$\ ujvst374\u1e.getId(Vehicle\u$$\ ujvst374\u1e.java) 位于com.mycompany.domain.dao.impl.LastPositionDaoImpl.findLastPosition(LastPositionDaoImpl.java:34) 位于sun.reflect.GeneratedMethodAccessor1487.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)上 位于org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) 编辑2:

    Inbox是客户端调用的类
    
    
        package com.mycompany.domain.facade;
    
        @Service
        @Transactional(propagation = Propagation.REQUIRED)
        public class ABDomain {
    
            public static ABDomain instance() {
                // SpringUtil implements ApplicationContextAware
                return SpringUtil.getApplicationContext().getBean(ABDomain.class);
            }
    
            public User getUserById(Long id) {
                /*
                    UsuarioDao is an interface, and its 
                    implementation UsuarioDaoImpl extends AbstractHibernateDao
                */
                return Registry.getUserDao().findById(id);
            }
        }
    
    
    
    
        package com.mycompany.domain.registry;
    
        @Component
        @Transactional
        public class Registry {
    
            private static ApplicationContext applicationContext;
    
            @Autowired(required = true)
            public Registry(ApplicationContext appContext) {
                applicationContext = appContext;
            }
    
            public static UserDao getUserDao() {
                return applicationContext.getBean(UserDao.class);
            }
        }
    
    
    org.springframework.orm.hibernate4.HibernateSystemException: could not initialize proxy - no Session; nested exception is org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:216) at org.springframework.orm.hibernate4.HibernateExceptionTranslator.convertHibernateAccessException(HibernateExceptionTranslator.java:57) at org.springframework.orm.hibernate4.HibernateExceptionTranslator.translateExceptionIfPossible(HibernateExceptionTranslator.java:44) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy120.findLastPosition(Unknown Source) at com.mycompany.domain.facade.ABDomain.findLastPosition(ABDomain.java:832) at com.mycompany.domain.facade.ABDomain$$FastClassBySpringCGLIB$$f56e1d49.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) at com.mycompany.domain.facade.ABDomain$$EnhancerBySpringCGLIB$$4c071cee.findLastPosition() at com.mycompany.cpr.client.Inbox.updateLastPosition(Inbox.java:714) at com.mycompany.cpr.client.Inbox.processMessage(Inbox.java:604) at com.mycompany.cpr.client.Inbox$3.run(Inbox.java:934) at java.lang.Thread.run(Thread.java:745) Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) at com.mycompany.domain.entity.Vehicle_$$_jvst374_1e.getId(Vehicle_$$_jvst374_1e.java) at com.mycompany.domain.dao.impl.LastPositionDaoImpl.findLastPosition(LastPositionDaoImpl.java:34) at sun.reflect.GeneratedMethodAccessor1487.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    at com.mycompany.cpr.client.Inbox.processMessage(Inbox.java:604)