【问题标题】:ssh4 LazyInitializationExceptionssh4 延迟初始化异常
【发布时间】:2014-03-21 02:50:08
【问题描述】:

这里是堆栈:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164) 
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285) 
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
cn.btttech.entity.Department_$_javassist_10.getPrivileges(Department_$_javassist_10.java) 
cn.btttech.service.comm.TableColumnsService.list(TableColumnsService.java:44) 
cn.btttech.service.comm.TableColumnsService$FastClassByCGLIB$3753c7f6.invoke(<generated>)
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 

我尝试过的解决方案:
1.web.xml

<filter> 
      <filter-name>hibernateFilter</filter-name> 
      <filter-class>org.springframework.orm.hibernate4.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>/*</url-pattern> 
      <dispatcher>REQUEST</dispatcher> 
      <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

前面配置struts2
2.TableColumnsService类

@Service("tableColumnsService") 
@Transactional(readOnly = true) 
public class TableColumnsService extends AbstractService<TableColumns>{ 

@Transactional(readOnly = true) 
public Set<TableColumns> list(User user, Menu menu) { 

System.out.println("MenuName:"+menu.getMenuName()); 

Set<TableColumns> tableColumnsesMenu = menu.getTableColumnses(); 
Department department = user.getDepartment();
Set<Privilege> privileges = department.getPrivileges();Here is error line

3.spring 交易

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> 
    <!-- TransactionManager -->  
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate4.HibernateTransactionManager"  
        p:sessionFactory-ref="sessionFactory" /> 

4.用户类

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "department_id") 
@Lazy(false) 
public Department getDepartment() { 
return this.department; 
} 

我很困惑,任何建议都将不胜感激。谢谢。

【问题讨论】:

    标签: java spring hibernate struts2 lazy-evaluation


    【解决方案1】:

    认为您正在尝试访问已分离的集合...

    删除@Lazy(false) 并尝试使用@ManyToOne(fetch = FetchType.EAGER)

    如果这工作恢复更改并添加 Hibernate.initizlize(department);

    你的映射也有错误.. 一个用户可以有多个部门,因此在这种情况下,用户类部门应该是一个集合而不是一个对象..

    也可以尝试使用特权.. 部门对象未初始化以获得权限..

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2012-11-01
      相关资源
      最近更新 更多