Java 使用@Where子句删除孤立项

Java 使用@Where子句删除孤立项,java,hibernate,one-to-many,cascade,all-delete-orphan,Java,Hibernate,One To Many,Cascade,All Delete Orphan,我有一个等级结构。有些子项是隐藏的,因此我有@Where子句: @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true) @org.hibernate.annotations.Where(clause = "hidden=false") private List<Element> children; @OneToMany(fetch=FetchType.LAZY,orphan=true) @org.hibernate.anno

我有一个等级结构。有些子项是隐藏的,因此我有
@Where
子句:

@OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
@org.hibernate.annotations.Where(clause = "hidden=false")
private List<Element> children;
@OneToMany(fetch=FetchType.LAZY,orphan=true)
@org.hibernate.annotations.Where(子句=“hidden=false”)
私人名单儿童;
但是当我想通过删除父节点来删除整个子结构(包括隐藏的子结构)时,hibernate似乎跳过了隐藏的子结构,我得到了db异常:

org.postgresql.util.PSQLException:错误:表“xxx”上的更新或删除违反了表“zzz”上的外键约束“yyy_yyy_id_fkey”


hibernate有什么方法来处理它吗?

我只是想避免对hibernate映射太过聪明,去掉
Where
并将该逻辑移到DAO。或者将其拆分为
所有子项
可见子项
——使用前者管理实体生命周期,在客户端层中使用另一个。接口隔离在这里也可能有帮助,尽管在实体层上坚持这一原则有点麻烦;另一个选项是始终在UI代码下面的图层上的实体和视图模型之间进行转换。(可能很费劲,但您可以摆脱延迟加载和会话范围问题。)