在我看来,JBoss为多个请求重用了实体管理器和底层的hibernate会话。我运行了一个测试,证明在某些情况下,实体的状态可能已过时,即使它仅使用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中的EM相同,则会发生意外行为。我测试了这个,得到了约。 10%的失败案例。