3
我有2個實體:Group
和Grouped
,與1 ManyToMany關聯。@ManyToMany cascade = CascadeType.REMOVE刪除關聯和實體
在數據庫中,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
實體,不僅協會我Group
實體刪除:
@ManyToMany(cascade = CascadeType.ALL, // same behavior with CascadeType.REMOVE
mappedBy = "grouped",
targetEntity = Group.class)
private Set<Group> groups = new HashSet<>();
如果我刪除級聯,休眠嘗試設置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> 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<Group> groups= new HashSet<>();
}
發佈兩個實體的代碼,您用於刪除分組的代碼以及異常的完整堆棧跟蹤。 –
是的,它的工作原理,謝謝!因此,重要的是刪除分組實體上的所有對要刪除的實體的引用,而且還要刪除在所有鏈接的組實體上刪除的分組的所有引用。 – Pleymor
這是我的代碼示例。實際上,真正重要的唯一方面是所有者方,這是沒有'mappedBy'屬性的一方。 –