有两个Composition关系的主从实体:VisitorApprove和VisitorApproveItem
从实体VisitorApproveItem又有两个多对多子实体(departments、personFilters)
交叉表中生成了约束:
![]()
当删除主实体VisitorApprove时,报违反该约束错误。

将主表中的Composition改为Association,或在主表一对多关系中添加@OnDeleteInverse(DeletePolicy.CASCADE)注解,在子表多对多关系中添加该注解都不行,同样报违反约束错误。
在数据库中将约束改为:删除时CASCADE则可以正常删除。
public class VisitorApprove {
@JmixGeneratedValue
@Column(name = "ID", nullable = false)
@Id
private UUID id;
@OnDeleteInverse(DeletePolicy.CASCADE)
@JoinColumn(name = "CATALOG_ID")
@ManyToOne(fetch = FetchType.LAZY)
private Catalog catalog;
@InstanceName
@Column(name = "NAME")
private String name;
@NumberFormat(pattern = "#")
@Column(name = "SORT")
private Integer sort;
@Column(name = "ORGANIZATION_ID")
private UUID organizationId;
@Composition
@OrderBy("sort")
@OneToMany(mappedBy = "visitorApprove")
private List<VisitorApproveItem> visitorApproveItems;
}
public class VisitorApproveItem {
@JmixGeneratedValue
@Column(name = "ID", nullable = false)
@Id
private UUID id;
@OnDeleteInverse(DeletePolicy.CASCADE)
@JoinColumn(name = "VISITOR_APPROVE_ID", nullable = false)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private VisitorApprove visitorApprove;
@NumberFormat(pattern = "#")
@Column(name = "TYPE")
private Integer type;
@NumberFormat(pattern = "#")
@Column(name = "SORT")
private Integer sort;
@JoinTable(name = "TL_VISITOR_APPROVE_ITEM__SYS_DEPARTMENT",
joinColumns = @JoinColumn(name = "VISITOR_APPROVE_ITEM_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "DEPARTMENT_ID", referencedColumnName = "ID"))
@OrderBy("namePinyin")
@ManyToMany
private List<Department> departments;
@JoinTable(name = "TL_VISITOR_APPROVE_ITEM__SYS_PERSON_FILTER",
joinColumns = @JoinColumn(name = "VISITOR_APPROVE_ITEM_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "PERSON_FILTER_ID", referencedColumnName = "ID"))
@OrderBy("namePinyin")
@ManyToMany
private List<PersonFilter> personFilters;
}