关于设置的几个事实:
Session
(在TLS上)ObjA
可能由主题A 创建,稍后由主题B 操纵,甚至更晚是由主题A 更新,但又被操纵线程Z但这次使用HQL !进行上述设置后,我遇到的错误如下:
org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
我的理解是
Session
有关,因为会话“拥有”与其“附加”的对象(它创建/加载的对象)问题很明显:
Session
分离,并在更新之前将其附加到Session
将是处理它的理想方法吗?如果我只使用一个Session
对象但听起来如此......阻塞(线程),我当然可以避免所有这些。
我确信这些问题很久以前就已经解决了,只需要找到它(不需要重新发明轮子)。
答案 0 :(得分:1)
该对象附加到Hibernate会话,是的。它只能一次附加一个,是的。除非您关闭Hibernate会话,否则您可以尝试evict()
该对象,从而将其从会话中分离,从而可以将其加载到另一个线程中。问题是,根据您的程序流程,这可能不实用。
答案 1 :(得分:0)
在获取对象之前调用clear()
。