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

nic*_* m. 5 java persistence jpa jta entitymanager

文件EntityManager.persist()说它会Make an instance managed and persistent.

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

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

建议将不胜感激:D

Jam*_*ett 5

这真的很奇怪。根据Sun EJB3 规范

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

contains方法返回 true:

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

contains方法返回 false:

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

请注意,级联持久化或删除的效果对于 contains 方法是立即可见的,而实体的数据库表示的实际插入或删除可能会推迟到事务结束。

contains您是否在同一笔交易中调用?