【发布时间】:2012-09-24 12:16:33
【问题描述】:
我有很多关于休眠会话的问题要问,因为我一直遇到问题。
我正在使用 Spring 3.1.1 和 Hibernate 4.1.3。
首先是我正在处理的类图。
代码类:
public class Equipement {
@ManyToOne(fetch = FetchType.LAZY)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public getOffice(){
return office ;
}
public class Office {
@ManyToOne(fetch = FetchType.LAZY)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public getService(){
return service ;
}
public class Service {
@ManyToOne(fetch = FetchType.LAZY)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public getDepartement(){
return departement ;
}
这是我加载所有设备的方式。
public class HibernateEquipementDao{
@SuppressWarnings("unchecked")
public List<Equipement> getAll() {
return sessionFactory.getCurrentSession().createQuery("from Equipement").list() ;
}
}
假设我将所有设备加载到 List<Equipement> allEquipements 中,并希望仅使用某些服务或某些部门的设备填充我的视图。
List<Equipement> aListOfEquipements = new ArrayList<Equipement>() ;
for(Equipement equipement : allEquipements)
if(equipement.getOffice().getService().getName().equals("name"))
aListOfEquipements.add(equipement) ;
我真的可以随时这样做吗?名为 Current 的会话始终处于活动状态? 有时我会得到那个例外。 org.hibernate.LazyInitializationException: 无法初始化代理 - 没有会话
这让我问我的 EquipementDao 使用的当前会话在哪里?
当我想获得设备的部门时,有没有办法打开会话?
或者还有其他方法可以继续吗?如何管理会话以及如何加载我的所有设备并毫无问题地访问其他实体?
【问题讨论】:
标签: spring hibernate session spring-mvc