EntistManager.contains()在persist()后返回false

时间:2011-12-16 03:47:59

标签: java jpa persistence jta entitymanager

EntityManager.persist()的文档说Make an instance managed and persistent

它将实体持久化到数据库,但当我调用EntityManager.contains()方法检查我刚刚持有的实体是否被管理时,它返回false

我只是想知道为什么会这样?也许有些东西我无法做到或者我忽略了什么?

建议将不胜感激:D

2 个答案:

答案 0 :(得分:3)

这真的很奇怪。根据{{​​3}}:

  

contains()方法可用于确定是否为实体   实例在当前持久化上下文中进行管理。

     

contains方法返回true:

     
      
  • 如果已从数据库中检索实体,但尚未删除或分离该实体。
  •   
  • 如果实体实例是新的,并且已在实体上调用persist方法,或者已将持久操作级联到该实体上。
  •   
     

contains方法返回false:

     
      
  • 如果实例已分离。
  •   
  • 如果已在实体上调用remove方法,或已将删除操作级联到该方法。
  •   
  • 如果实例是新的,并且尚未在实体上调用persist方法,或者持久化操作尚未级联到   它。
  •   
     

请注意,持续或删除级联的效果是   对包含方法立即可见,而实际   插入或删除实体的数据库表示   可能会推迟到交易结束。

您是否在同一交易中呼叫contains

答案 1 :(得分:0)

我们做了一些解决方法,而不是坚持>刷新,我们只是从数据存储中获取自动生成的密钥,并将其手动分配给实体的密钥字段,然后保留它。