我有2个实体:Group和Grouped,有1个ManyToMany关联.
在数据库中,Association表在Group和Grouped上都有一个NOT NULL FK.
我希望Hibernate在删除所有分组时删除关联,但不删除组.
删除Grouped实体的代码:
@Autowired
private final GroupedRepository groupedRepository;
public void delete(Grouped groupedToRemove) {
groupedRepository.delete(groupedToRemove);
}
如果我设置cascade = CascadeType.ALL或cascade = CascadeType.REMOVE,当我删除Grouped实体时,我的组实体将被删除,而不仅仅是关联:
@ManyToMany(cascade = CascadeType.ALL, // same behavior with CascadeType.REMOVE
mappedBy = "grouped",
targetEntity = Group.class)
private Set groups = new HashSet<>();
如果我删除级联,hibernate会尝试设置group_id = null并抛出ModelConstraintException.我不想将FK设置为??可空.
集团实体:
@Entity
@Table(name = "groups")
@Getter
@Setter
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToMany(targetEntity = Grouped.class)
@JoinTable(
name = "association",
joinColumns = @JoinColumn(name = "group_id", nullable = false, updatable = false),
inverseJoinColumns = @JoinColumn(name = "grouped_id", nullable = false, updatable = false)
)
private Set grouped= new HashSet<>();
}
分组实体:
@Entity
@Table(name = "grouped")
@Getter
@Setter
public class Grouped {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToMany(mappedBy = "grouped", targetEntity = Group.class)
private Set groups= new HashSet<>();
}