jpa hibernate何时是一个托管的对象

时间:2011-02-20 01:18:59

标签: jpa

我有一个测试用例,我使用entitymanager.find方法通过id获取一个对象。然后我尝试使用entityManager.contains()检查对象是否处于托管状态。但包含错误。所以当一个对象处于持久状态时,包含返回true。

2 个答案:

答案 0 :(得分:0)

如果在实体管理器中调用id by id,则该对象将在仍处于事务内的情况下进行管理。否则它将变为分离,您必须调用entityMangerInstance.merge()来管理对象。

答案 1 :(得分:0)

可以在没有事务的情况下调用 find -method,但是,在这种情况下,如果使用EntityManager,则生成的实体(如果找到)将处于分离状态事务范围的持久化上下文“。如果EntityManager具有“扩展持久性上下文”,则结果将处于托管状态。如果在事务中调用 find -method,则将在两种情况下管理生成的实体。

有关“事务范围”与“扩展”持久性上下文的详细信息,请参阅here