EntityManager.persist()
的文档说Make an instance managed and persistent
。
它将实体持久化到数据库,但当我调用EntityManager.contains()
方法检查我刚刚持有的实体是否被管理时,它返回false
。
我只是想知道为什么会这样?也许有些东西我无法做到或者我忽略了什么?
建议将不胜感激:D
答案 0 :(得分:3)
这真的很奇怪。根据{{3}}:
contains()
方法可用于确定是否为实体 实例在当前持久化上下文中进行管理。
contains
方法返回true:
- 如果已从数据库中检索实体,但尚未删除或分离该实体。
- 如果实体实例是新的,并且已在实体上调用
persist
方法,或者已将持久操作级联到该实体上。
contains
方法返回false:
- 如果实例已分离。
- 如果已在实体上调用
remove
方法,或已将删除操作级联到该方法。- 如果实例是新的,并且尚未在实体上调用
persist
方法,或者持久化操作尚未级联到 它。请注意,持续或删除级联的效果是 对包含方法立即可见,而实际 插入或删除实体的数据库表示 可能会推迟到交易结束。
您是否在同一交易中呼叫contains
?
答案 1 :(得分:0)
我们做了一些解决方法,而不是坚持>刷新,我们只是从数据存储中获取自动生成的密钥,并将其手动分配给实体的密钥字段,然后保留它。