java - 使用 hibernate4.1 和 spring 3.1 获取 LazyInitializationException

标签 java spring hibernate

我正在使用 OpenSessionInViewFilter。这是我的 web.xml 中的第一个过滤器

<filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这是我的 applicationContext.xml 的一部分

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
  </bean>

<bean id="userBc" class="com.tutorial.bc.auth.UserBcImpl">
    <property name="userDao">
      <ref local="userDao"/>
    </property>
  </bean>
...
<tx:annotation-driven transaction-manager="txManager"/>

我在 hbm 文件中的映射-

<set name="userCoachingRoles" table="user_coaching_role" lazy="true" cascade="all-delete-orphan">
      <key column="user_id"/>
      <many-to-many column="coaching_id" class="com.tutorial.entity.coaching.Coaching" lazy="proxy"/>
</set>

我的 userBc 中获取用户的方法用 @Transactional 注释,并且我的实体 User 有一个方法 getUserCoachingRoles。我在使用此方法时遇到异常 -

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

即使我使用 OpenSessionInViewFilter ,我也无法理解为什么没有 session 。需要这方面的帮助。

最佳答案

您是否有机会在单独的线程中调用 getUserCoachingRoles ?如果是这样,这是预期的行为。

由于 UserCoachingRoles 没有立即加载,Spring 无权访问该线程内的数据库连接,因此无法加载它。您需要:

  • 在您的线程中创建一个封闭的 session 包装器;
  • UserCoachingRoles 的 id 传递给线程,而不是传递对象,并在该线程内加载属性

关于java - 使用 hibernate4.1 和 spring 3.1 获取 LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315230/

相关文章:

java - @OnDelete 仅与 @OneToMany 一起使用

java - 顶部带有 JComponents 的动画

java - 尝试将 mongoDB 聚合查询转换为 java 聚合查询

spring - Tomcat 7 中的 CSRF 保护

spring - 使用Querydsl仅选择Spring中的特定列?

mysql - 无法建立 JDBC 连接 - 没有有效的解决方案 :/

java - Hibernate Envers 也会审核 oneToMany 端,即使它没有任何更改

java - JSP项目中的JDBC SQL Server连接错误

java - 数组定义中预期出现错误 ';';已使用

java - org.springframework.dao.InvalidDataAccessApiUsageException