tes*_*123 9 merge jpa entitymanager jpa-2.0
有一段时间我一直在想为什么在使用JPA时,我是否必须编写我的删除方法:
@Transactional
public void delete(Account account)
{
if (entityManager.contains(account))
{
entityManager.remove(account);
}
else
{
entityManager.remove(entityManager.merge(account));
}
}
Run Code Online (Sandbox Code Playgroud)
也许不需要包含,因为事务以此方法开始和结束,但我仍然想知道为什么删除不能只是取一个非托管对象.是因为需要对其进行管理才能知道该对象的id是什么?任何其他见解都会很棒.我只是想了解JPA删除的方法和原因.
JB *_*zet 17
删除操作可以级联到实体的关联.
为了能够知道要删除哪些关联实体,实体管理器不能依赖于分离的实体,因为根据定义,这个分离的实体不反映实体的最新状态,并且不一定具有所有实体级联关联递归加载.
因此,如果它接受了一个分离的实体,则remove()必须为您做出决定:合并分离的实体并根据分离的实体包含的内容执行remove操作,或者只是加载与分离的实体具有相同ID的实体,然后执行基于加载实体的操作.
它不需要为您决定,而只需要一个附加的实体.这样,你决定你想要什么.
| 归档时间: |
|
| 查看次数: |
6379 次 |
| 最近记录: |