当多对多关系包含在一对多关系中时,删除时报约束错误

有两个Composition关系的主从实体:VisitorApprove和VisitorApproveItem
从实体VisitorApproveItem又有两个多对多子实体(departments、personFilters)
交叉表中生成了约束:
image
当删除主实体VisitorApprove时,报违反该约束错误。
image
将主表中的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;
}

Jmix在建表时:
1、一对多关系,声明了DeletePolicy.CASCADE时,从表中的外键是“删除时Cascade”
2、多对多关系,交叉表中的外加为“删除时Restrict”
我猜测是否是这样的情况:
1、EntityA和EntityB形成多对多关系时,交叉表EntityA_EntityB_Link中的外键是不支持级联删除的,当Jmix在删除EntityA或EntityB时,是先删除交叉表中的数据,再删除主实体。这种情况在ListView中是能正确执行的。
2、当EntityA或EntityB和另一个主实体EntityMain形成多对一关系,即EntityMain包含多个EntityA,并设置了级联删除。这时候删除EntityMain时,会级联删除EntityA,但在这个级联删除过程中,上面的先删除交叉表的逻辑并没有执行,导致在ListView中执行EntityMain删除操作时发生违反约束异常。

我不太明白的是:生成多对多交叉表时,外键不能直接设置为“删除时Cascade”吗?就像一对多关系中声明了DeletePolicy.CASCADE时一样。