【问题标题】:Hibernate Soft Delete using update Cascade使用更新级联的休眠软删除
【发布时间】:2014-06-02 08:13:00
【问题描述】:

如果我有 3 个相互连接的班级。

房间类

@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;
}

人员类

 @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;
}

然后是电话类

 @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;
}

我在这里要做的是实现软删除,将值 1 插入已删除列的已删除项,并将值 0 插入现有项。我也想级联我的删除,所以如果删除了任何房间,那么与该房间相关的每个人和电话也将被删除(“已删除”列值设置为 1)。我的问题是如何在Hibernate 上做到这一点?有什么优雅的方式来实现这些东西吗?

【问题讨论】:

  • 你只是在设置标志。已删除=1,已删除=0。它实际上并没有删除。我不明白你这样做是为了达到什么目的。

标签: java mysql hibernate spring-mvc


【解决方案1】:

使用 Hibernate 实现软删除的最佳方法是在您的类上使用 @SQLDelete 注释。

确保您的映射设置为级联删除

调用 session.delete(yourClass) 应该实现您的软删除

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 ")

【讨论】:

  • 这几乎不是最好的方法,因为它用大量的数据访问逻辑污染了实体。如果可能的话,通过覆盖基本存储库方法来做到这一点将是一种更好的方法。如果不可能,那么这几乎是唯一的方法。绝对不是一个好方法。
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 2022-09-27
  • 2011-12-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多