处理一对多主从细节关系中的细节删除 - 休眠

时间:2017-10-15 22:52:41

标签: hibernate jpa

我有一个非常典型的一对多关系(一个请求记录和请求详细信息记录)的场景,这些关系通过hibernate进行检索,从会话中分离,修改后再用hibernate修改后再次保存,...现在假设一个在客户端删除详细记录,我想保留它已被删除(从数据库中删除)...当前逻辑执行以下操作(每次更新时):再次检索所有从记录,将客户端输入与持久记录进行比较,如果缺少任何记录,则表示已删除,因此会触发session.delete调用以删除指定记录...然后最终更新实体session.update ....我想知道是否有另一种方法让提供者注意到记录被删除而没有进行这种比较......任何帮助?

1 个答案:

答案 0 :(得分:-1)

您可以使用级联和删除孤立选项让您的父级更改影响子项:

@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval=true)

然后,您需要使用Session.update()或Session.merge()来重新附加分离的实例。这样,您所做的任何更改都将在事务结束时保存(在提交时)。

这是我的代码示例:

    session.persist(a1);
    session.flush();
    session.getTransaction().commit();//a1 saved

    session.evict(a1);//a1 detached

    a1.getTableBs().remove(0);//remove child

    session.beginTransaction();
    session.update(a1);//reattach a1
    session.flush();
    session.getTransaction().commit();

    session.close();

在我的事务结束时,hibernate运行这样的查询来删除子项:

Hibernate: 
delete 
from
    TABLE_B 
where
    ID=?