【问题标题】:Hibernate Bidirectional or two unidirectionals relationsHibernate 双向或两个单向关系
【发布时间】:2014-05-28 10:48:26
【问题描述】:

我有两个实体 Users 和 Groups ,与多对多关联

一个用户属于许多组并且他认识他们 (navigabilite_1)
一个组包含许多用户,他认识他们 (navigabilite_2)

我希望当我删除一个用户时,只有用户和关系(在联接表中)被删除而不是组,删除组的相同不应该只影响用户组和关系

我应该使用什么样的关联双向或两个单向,我应该把级联放在哪里删除?

【问题讨论】:

    标签: mysql sql hibernate


    【解决方案1】:

    您应该使用双向关联,并且不应使用任何级联,因为级联也会删除关联另一端的实体。

    假设 User.groups 是关联的所有者,删除组将使用

    for (User user : group.getUsers()) {
        user.getGroups().remove(group);
    }
    
    // optional:
    group.getUsers().clear();
    
    session.delete(group);
    

    删除用户将使用

    // optional:
    for (Group group : user.getGroups()) {
        group.getUsers().remove(user);
    }
    
    user.getGroups().clear();
    
    session.delete(user);
    

    【讨论】:

    • 所以没有办法自动制作?
    • 我不知道有任何这种可能性,不。除非您在数据库本身中使用级联选项。
    • 我应该只使用一个循环+删除或清除而不是同时使用两者?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多