JPA Hibernate каскадирование многих ко многим

Я использую JPA 2.0 и спящий режим. У меня есть класс User и класс Group, как показано ниже:

public class User implements Serializable {
    @Id
    @Column(name="USER_ID")
    private String userId;

    @ManyToMany
    @JoinTable(name = "USER_GROUP",
               joinColumns = {
                   @JoinColumn(name = "GROUP_ID")
               },
               inverseJoinColumns = {
                   @JoinColumn(name = "USER_ID")
               }
    )
    private Set<Group> groupList;

    //get set methods
}

public class Group
{
    @Id
    @Column(name="GROUP_ID")
    private String groupId;

    @ManyToMany(mappedBy="groupList")
    private Set<User> memberList;
    //get set methods
}

Затем я создаю пользователя и группу, а затем назначаю пользователя группе.

Я хочу, чтобы я удалял group, группа будет удалена (конечно), и все отношения между пользователем и группой, которые имеет группа, будут автоматически удалены из таблицы соединения USER_GROUP, но сам пользователь не будет удален из таблицы USER.

С кодом, который у меня выше, при удалении группы будет удалена только строка в таблице GROUP, и у пользователя по-прежнему будет запись в удаленной группе в таблице соединения USER_GROUP.

Если я поставлю каскад в классе User следующим образом:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "USER_GROUP",
joinColumns =
{
    @JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns =
{
    @JoinColumn(name = "USER_ID")
})
private Set<Group> groupList;

Когда я удаляю группу, пользователь также будет удален!

Есть ли способ добиться того, чего я хочу?

49
задан Jin Kwon 20 December 2016 в 03:33
поделиться