如何解决HIbernate:请勿在软删除时删除与OneToOne相关的对象
Tl; dr:如何从Hibernate的删除级联中排除特定的OnetoOne关系?
我在应用程序中指定了以下实体:
Foo:
@Entity
@Table(name = "foos")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@sqlDelete(sql = "UPDATE foos SET deleted = true WHERE foo_id = ?;")
public class FooEntity implements Serializable {
@Id
@GeneratedValue(generator = "foo_seq")
@Column(name = "foo_id")
@Access(value = Accesstype.PROPERTY)
private Long id;
... snip ..
@OnetoOne(cascade = CascadeType.PERSIST,orphanRemoval = true,fetch = FetchType.LAZY)
@JoinColumn(name = "bar")
@OnDelete(action = OnDeleteAction.NO_ACTION)
@EqualsAndHashCode.Exclude
@ToString.Exclude
private BarEntity bar;
}
栏:
@Entity
@Table(name = "bars")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class BarEntity implements Serializable {
@Id
@GeneratedValue(generator = "bar_seq")
@Column(name = "bar_id")
private Long id;
...
}
我的问题是现在进入休眠状态,因为当我删除FooEntity时,休眠级联会删除到BarEntity并遇到违反约束的情况,因为BarEntity仍然是从FooEntitity引用的,因此无法删除。
删除我正在运行的是:
repository.deleteById(id);
休眠查询日志:
Hibernate:
UPDATE
foos
SET
deleted = true
WHERE
foo_id = ?;
Hibernate:
/* delete x.x.BarEntity */ delete
from
bar
where
bar_id=?
我知道我可以在Foo中对Bar的引用为空,但是我确实想在软删除后保留两个对象(及其关系)。 我有什么办法可以做到这一点,并防止休眠将删除级联到该特定实体?
解决方法
您是否尝试在OneToOne注释中将orphanRemoval=true
更改为orphanRemoval=false
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。