微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HIbernate:请勿在软删除时删除与OneToOne相关的对象

如何解决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 举报,一经查实,本站将立刻删除。