这在我看来,JBoss的重用实体管理器和多个请求底层的Hibernate Session。 我已经运行一个测试证明,在某些情况下,一个实体的状态可能会过时,即使它只是获取使用em.find()
如何禁用此行为,并强迫清或扔掉使用的会话,以确保每个请求与清除缓存处理?
UPD:
下面是一个例子的情况。
HTTP请求1.一种会话bean创建实体实例,并使用字段存储为“A”设定为值1。持久实体获取ID = 4。
HTTP请求2.会话bean查找与ID = 4的实体,设置其场“A”到值2并保存它。
HTTP请求3.会话bean查找与ID = 4,并检查它的场的“A”的实体。 如果该值为1就做一件事情,如果是2它是另一回事。
在情况下,如果在请求3 EM碰巧是相同请求1时,发生不期望的行为。 我测试了这一点,得到了约。 失败的10%的病例。