在我看来,JBoss 为多个请求重用了实体管理器和底层休眠会话。我已经运行了一个测试,证明在某些情况下,实体的状态可能已经过时,即使它只是使用em.find()
.
如何禁用此行为并强制清除或丢弃使用过的会话以确保使用清除缓存处理每个请求?
升级版:
这是一个示例案例。
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%的失败案例。