加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hibernate:如何只获取非逻辑删除的对象

发布时间:2020-12-14 05:38:38 所属栏目:Java 来源:网络整理
导读:几乎我们数据库中的每个表都有一个FK到审计表,它记录了创建,更新和删除的状态(日期和用户名). 我们将审计表映射到Auditing类并使用它如下: @MappedSuperclasspublic class BusinessObject extends DataObject { private static final long serialVersionUID
几乎我们数据库中的每个表都有一个FK到审计表,它记录了创建,更新和删除的状态(日期和用户名).

我们将审计表映射到Auditing类并使用它如下:

@MappedSuperclass
public class BusinessObject extends DataObject {

    private static final long serialVersionUID = -1147811010395941150L;

    @OneToOne(fetch = FetchType.EAGER,cascade = { CascadeType.ALL })
    @JoinColumn(name = "AUD_ID")
    private AuditingObject auditing;
...

正如您所期望的那样,几乎每个实体都从BusinessObject扩展而来.

有一种简单的方法可以说,对于每个businessObject,只接收“auditing.deleted为null”.

我已经尝试在businessObject中添加@Where和@WhereJoinTable,但这似乎不像我期望的那样工作.

目前,我已经对我的一个查询做了这个工作,但我讨厌为所有查询执行此操作,因为我们有大约150个查询.

@NamedQuery(
    name="allCountries",query="SELECT c FROM Country c"
        + " LEFT JOIN FETCH c.labelDefinition "
        + " LEFT JOIN FETCH c.labelDefinition.translations "
        + " WHERE c.auditing.deleted is null"
        + " ORDER BY c.code"
)

解决方法

IMO,实现软删除的最简单方法是在您的实体中添加标志并使用:

> @SQLDelete注释覆盖默认的Hibernate删除(并执行标志的更新)
>您的实体和关联的@Where(或@Filters?)注释,用于过滤已删除的实体

但不确定这如何适合您的审核表.需要进行一些进一步的探索和测试.

资源

> Soft deletes using Hibernate annotations

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读