Hibernate的Session引用锁定有关问题
Hibernate的Session引用锁定问题今天遇到一个奇怪的问题:User(用户)类,与Message(短消息)类是一对多的关系
Hibernate的Session引用锁定问题
今天遇到一个奇怪的问题:
User(用户)类,与Message(短消息)类是一对多的关系。
Message代码截取:
public class Message {...@OneToOne(fetch = FetchType.LAZY)@JoinColumn(name = "SENDER_USERID")private UserAccount sender;@OneToOne(fetch = FetchType.LAZY)@JoinColumn(name = "RECEIVER_USERID")private UserAccount receiver;...}当引用Message类时,会造成无法创建Message类无法创建持久化Session。
问题分析:当用户登录系统之后,Controller会在HttpSession中创建用户实例,在容器的角度来看,它是一个Transaction级别的对象,用来实时记录、读取用户信息状态。在Hibernate的持久化Session中也会一直存在。
当Message想要初始化Hibernate Session时,会产生HibernateSession无法打开的情况。因为关联关系中定义的:
引用@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SENDER_USERID")
会去session创建User的hibernate session访问。此时,矛盾出现了!
前面提到,User的HibernateSession会出于一直打开的状态,而此时Message要创建对User的关联的话,将无法创建新的HibernateSession。无法返回一个回话,也就会报session is closed的错误。
还是应该对HibernateSession进行深入的研究啊
相关的链接:
http://www.iteye.com/problems/9957
http://wmcoo.iteye.com/blog/486168