简体   繁体   English

使用更新Cascade进行休眠软删除

[英]Hibernate Soft Delete using update Cascade

In case I have 3 class which are connected each other. 如果我有3个相互连接的课程。

Room Class 房间等级

@Entity
@Table(name="table_room")
Class Room{
    @Id
    @GeneratedValue
    @Column(name="id_room")
    private Integer id;

    @Column(name="name")
    private String name;

    @OneToMany(mappedBy="room")
    private List<Person> people;

    @Column(name="deleted")
    private int deleted;
}

Person Class 人类

 @Entity
@Table(name="table_person")
Class Person{
    @Id
    @GeneratedValue
    @Column(name="id_person")
    private Integer id;

    @Column(name="name")
    private String name;

    @ManyToOne
    @JoinColumn(name="id_room")
    private Room room;

    @OneToMany(mappedBy="person")
    private List<Phone> phones;

    @Column(name="deleted")
    private int deleted;
}

and then Phone Class 然后是电话课

 @Entity
@Table(name="table_phone")
Class Phone{
    @Id
    @GeneratedValue
    @Column(name="id_person")
    private Integer id;

    @Column(name="name")
    private String name;

    @ManyToOne
    @JoinColumn(name="id_person")
    private Person person;

    @Column(name="deleted")
    private int deleted;
}

What i want to do here is implement soft delete with inserting value 1 to deleted column for deleted item and inserting value 0 for exist item. 我想要做的是实现软删除,将已删除项的已删除列插入值1,并为已有项插入值0。 Also I want Cascading my deletion, so if any room deleted, then every person and phone which is related with that room will be also deleted("deleted" column value set to 1). 我也希望级联我的删除,所以如果任何房间被删除,那么与该房间相关的每个人和电话也将被删除(“删除”列值设置为1)。 My question is how can I do that on Hibernate ? 我的问题是如何在Hibernate上做到这一点? Is there any elegant way to implement this stuff? 有没有优雅的方式来实现这些东西?

The best way to achieve a soft delete with Hibernate is to use the @SQLDelete annotation on your classes. 使用Hibernate实现软删除的最佳方法是在类上使用@SQLDelete注释。

make sure your mapping is set to cascade delete 确保您的映射设置为级联删除

calling session.delete(yourClass) should achive your soft delete 调用session.delete(yourClass)应该实现软删除

Hibernate doc Hibernate doc

//used to overide the normal delete behavior
@SQLDelete(sql="UPDATE (table_name) SET deleted = '1' WHERE id = ?")
//optional Use this to exclude deleted element from get 
@Where(clause="deleted <> '1'")
//OR (Filter may also be used if you need to load deleted items occasionally)
@FilterDef(name="ProductFilter",defaultCondition="deleted <> 1 ")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM