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

标签 java hibernate orm soft-delete mappedsuperclass

我们数据库中的几乎每个表都有一个 FK 到审计表,该表记录创建、更新和删除状态(日期和用户名)。

我们将审计表映射到审计类并像这样使用它:

@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 is 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 delete 的注释(并执行标志的更新)
  • @Where (或 @Filters?)对您的实体和关联进行注释以过滤已删除的实体

虽然不确定这如何适合您的 Auditing 表。需要进一步探索和测试。

资源

关于java - Hibernate:如何只获取非逻辑删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986833/

相关文章:

java - Scala -> Java,将函数作为参数传递给另一个函数

hibernate :未配置 CurrentSessionContext

java - NetBeans Web 应用程序

symfony2 : How to remove related entity with doctrine/restrict annotation?

java - Hibernate 在整个 Spring Boot 应用程序上设置属性访问策略

java - Android Activity : how to init variable with constructor? 我需要 putExtra 吗?

java - 使用 htmlparser 解析网站时无法获取所有匹配的节点

java - 只需按一次按钮

hibernate - Hibernate 使用的默认缓存?

javascript - Node orm2 : orm. 连接回调未调用