Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Hibernate事务无会话延迟加载_Spring_Hibernate - Fatal编程技术网

Spring Hibernate事务无会话延迟加载

Spring Hibernate事务无会话延迟加载,spring,hibernate,Spring,Hibernate,我只有一个控制器有一个延迟加载实体的问题(有一个事务已启动并提交,请参阅堆栈跟踪) 17:56:46084调试HibernateTransactionManager:438-找到线程绑定会话[org.hibernate.impl。SessionImpl@6b204e88]用于Hibernate事务 17:56:46085调试HibernateTransactionManager:471-参与现有事务 17:56:46085调试HibernateTransactionManager:438-找到线

我只有一个控制器有一个延迟加载实体的问题(有一个事务已启动并提交,请参阅堆栈跟踪)

17:56:46084调试HibernateTransactionManager:438-找到线程绑定会话[org.hibernate.impl。SessionImpl@6b204e88]用于Hibernate事务
17:56:46085调试HibernateTransactionManager:471-参与现有事务
17:56:46085调试HibernateTransactionManager:438-找到线程绑定会话[org.hibernate.impl]。SessionImpl@6b204e88]用于Hibernate事务
17:56:46085调试HibernateTransactionManager:471-参与现有事务
Hibernate:选择preference0.id作为id66,选择preference0.name作为name66,选择preference0.value作为value66,选择preference0.default作为default4,选择preference0.updated作为updated5,选择preference0.updated作为preference0,其中preference0.name='scheduleInterval'
17:56:46086调试GooGooStatementCache:457-cxnStmtMgr.statementSet(com.mysql.jdbc)。JDBC4Connection@5ec60ee2).size():21
17:56:46086调试GoogoStatementCache:196-checkoutStatement:com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats-总大小:111;退房:1;连接数:10;数字键:111
17:56:46087调试GoogoStatementCache:271-CheckInstaement():com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache统计数据--总大小:111;已签出:0;连接数:10;数字键:111
17:56:46089致命应用程序:79-服务
org.hibernate.LazyInitializationException:无法初始化代理-无会话
位于org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
位于org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
位于org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
在com.model.User\u$$\ uJavassist\u76.getName(User\u$$\ uJavassist\u76.java)
位于com.model.json.ScheduleItemWrapper.wrap(ScheduleItemWrapper.java:55)
位于com.web.controllers.ajax.Model.wrap(Model.java:127)
位于com.web.controllers.ajax.Model.toJSON(Model.java:165)
位于com.web.controllers.ajax.Model.getContent(Model.java:51)
位于com.web.controllers.ajax.BasicAction.execute(BasicAction.java:27)
位于com.web.HibernateServlet.doService(HibernateServlet.java:113)
位于com.web.HibernateServlet.service(HibernateServlet.java:66)
位于sun.reflect.GeneratedMethodAccessor200.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:695)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:150)上
位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:260)
位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:161)上
位于org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
位于org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
在com.levitech.web.controllers.ScheduleList$$enhancerbyglib$$4a7ae33e.service()上
位于com.levitech.web.RequestDispatcher.service(RequestDispatcher.java:63)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
运行(Thread.java:662)
17:56:46090调试HibernateTransactionManager:753-启动事务提交
17:56:46090调试HibernateTransactionManager:653-在会话[org.Hibernate.impl]上提交Hibernate事务。SessionImpl@6b204e88]
17:56:46091调试HibernateTransactionManager:735-关闭Hibernate会话[org.Hibernate.impl。SessionImpl@6b204e88]交易后
17:56:46091调试会话FactoryUtils:800-关闭休眠会话
模型(ScheduleItem和User)及其hibernate映射

public class ScheduleItem {
  private Integer id;
  ....
  private User user;

}

public class User {
  private Integer id;
  ...
  private String name;

}

<class 
    name="ScheduleItem" 
    table="schedule_item"
>

    <cache usage="read-write"/>


    <id
        name="id"
        type="integer"
        column="id"
    >
    <generator class="identity" />
    </id>
    <many-to-one name="user" column="user_id" lazy="proxy"></many-to-one>
</class>

<class 
    name="ScheduleItem" 
    table="schedule_item"
>

    <cache usage="read-write"/>


    <id
        name="id"
        type="integer"
        column="id"
    >
    <generator class="identity" />
    </id>
    <property name="name" column="name" type="string" />
</class>
公共类ScheduleItem{
私有整数id;
....
私人用户;
}
公共类用户{
私有整数id;
...
私有字符串名称;
}
我找到了罪犯。OpenSessionViewFilter正在使用不同的se
public class ScheduleItem {
  private Integer id;
  ....
  private User user;

}

public class User {
  private Integer id;
  ...
  private String name;

}

<class 
    name="ScheduleItem" 
    table="schedule_item"
>

    <cache usage="read-write"/>


    <id
        name="id"
        type="integer"
        column="id"
    >
    <generator class="identity" />
    </id>
    <many-to-one name="user" column="user_id" lazy="proxy"></many-to-one>
</class>

<class 
    name="ScheduleItem" 
    table="schedule_item"
>

    <cache usage="read-write"/>


    <id
        name="id"
        type="integer"
        column="id"
    >
    <generator class="identity" />
    </id>
    <property name="name" column="name" type="string" />
</class>
<filter>
      <filter-name>hibernateFilter</filter-name>
      <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      <init-param>
         <param-name>sessionFactoryBeanName</param-name>
         <param-value>sessionFactory</param-value>         
      </init-param>      
   </filter>

   <filter-mapping>
     <filter-name>hibernateFilter</filter-name>
     <url-pattern>/app/s/*</url-pattern>
   </filter-mapping> 
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
     <property name="driverClass" value="${db.driver}"/>
     <property name="jdbcUrl" value="${db.url}"/>
     <property name="user" value="${db.user}"/>
     <property name="password" value="${db.pass}"/>

       <!-- Pool properties -->
     <property name="minPoolSize" value="5" />
     <property name="maxPoolSize" value="100" />
     <property name="acquireIncrement" value="5" />
     <property name="maxStatements" value="200" />
     <property name="idleConnectionTestPeriod" value="120" />
     <property name="maxIdleTime" value="1800" />

  </bean>

      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"></property>
         <property name="mappingLocations" value="classpath*:com/model/hbm/**/*.hbm.xml" />

    <property name="hibernateProperties">
      <value>
        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
        hibernate.show_sql=true
        hibernate.cache.region.factory_class=net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
        hibernate.cache.use_query_cache=true
        hibernate.cache.use_second_level_cache=true
      </value>
    </property>
      </bean>

      <bean id="transactionManager"
                class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
      </bean>
User user = session.load(User.class, 1000); // Create a proxy
user.getName(); // This would throw lazy initialization exception if row doesn't exist