我有一个测试用例,我使用entitymanager.find方法通过id获取一个对象。然后我尝试使用entityManager.contains()检查对象是否处于托管状态。但包含错误。所以当一个对象处于持久状态时,包含返回true。
答案 0 :(得分:0)
如果在实体管理器中调用id by id,则该对象将在仍处于事务内的情况下进行管理。否则它将变为分离,您必须调用entityMangerInstance.merge()来管理对象。
答案 1 :(得分:0)
可以在没有事务的情况下调用 find -method,但是,在这种情况下,如果使用EntityManager,则生成的实体(如果找到)将处于分离状态事务范围的持久化上下文“。如果EntityManager具有“扩展持久性上下文”,则结果将处于托管状态。如果在事务中调用 find -method,则将在两种情况下管理生成的实体。
有关“事务范围”与“扩展”持久性上下文的详细信息,请参阅here。