小编joe*_*iMJ的帖子

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

几乎我们数据库中的每个表都有一个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;
...
Run Code Online (Sandbox Code Playgroud)

正如您所期望的那样,几乎每个实体都从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"
)
Run Code Online (Sandbox Code Playgroud)

java orm hibernate soft-delete mappedsuperclass

6
推荐指数
1
解决办法
4777
查看次数

标签 统计

hibernate ×1

java ×1

mappedsuperclass ×1

orm ×1

soft-delete ×1