我有一个托管bean,其中包含当前页面的实体对象列表。在我创建一个新对象并在事务中使用persist()将其持久保存到数据库之后;在另一个事务中,当我调用merge时(由于该实体由于先前的事务提交而处于分离状态);实体管理器无法在持久性上下文中找到对象,并向数据库抛出选择查询。我是否缺少某些东西,或者是正常行为?
更新:当我使用mysql数据库和自动生成的ID列时,存在上述问题。当我在Oracle上使用ID序列时,它不存在。但仍然 持久性上下文应了解生成的ID;还可以通过任何方式窥视持久性上下文以查看哪些实体退出;我正在使用hibernatebtw
这是正常的行为。持久性上下文默认情况下具有与事务相同的生存期。这是完全正常的:提交事务后,其他事务可能会修改该实体,并且Hibernate必须从数据库中重新加载该实体以确保其不返回陈旧的值。