是否可以暂时禁用 Hibernate 实体的级联?

Is it possible to temporarily disable cascading for a Hibernate entity?

给定一个 Hibernate/JPA 实体,相关实体的级联设置为 ALL

@Entity
public class Entity {
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "entity")
    private Set<RelatedEntities> relatedEntities;
}

是否可以暂时关闭级联,例如允许实体在不持久化其相关实体的情况下持久化?

您不能暂时禁用级联(至少据我所知),但由于您使用 Hibernate,您可以 insert new entity using HQL

String hqlInsert = "insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...";
int createdEntities = s.createQuery( hqlInsert ).executeUpdate();

总是有一个"manual"的解决方案,你把relatedEntities记在一个变量中以备后用,并在持久化之前将null值设置为它在Entity实例上的值它。

不,做不到,至少依我的小见,这样做也不是什么好事。当其他开发人员查看映射和执行 persist/merge/delete 的代码时......他们会期望应用级联并引入意外行为,如果他们监督级联在其他地方暂时禁用他们所关注的代码改变。

但是,您可以将没有级联字段的新实体 class 映射到同一个 table。然后在您不希望应用级联的情况下使用该实体。