我对分离实体的删除操作有疑问。
根据规范 “如果X是一个分离的实体,则remove操作将抛出IllegalArgumentException(或者事务提交将失败)。”
但是删除操作对于分离的实体可能有效。对于事务范围的持久性上下文,请考虑以下方案:
1)实体在事务T1中持久存储在数据库中。所以它变得脱节了。 2)在事务T2中对该分离的实体进行删除调用。
因为实体存在于数据库中,所以remove调用应该是有效的,并且应该由于事务T2而从数据库中删除实体。但是根据规范,应该通过删除或事务提交抛出异常应该失败。
我在这里遗漏了什么吗?是什么原因?
答案 0 :(得分:4)
detached entities
是non managed entities
,您尝试删除非托管实体,如果要删除它,则必须在managed state
中进行删除。
或另一种方法是找出分离实体的引用并尝试删除。
getEntityManager().getReference("detached");
remove("reference");
我不确定上述内容,但您可以尝试一下。