Hibernate Envers:使用本机查询从_AUD表中删除数据

时间:2018-12-18 15:13:04

标签: hibernate sql-delete hibernate-envers

我正在使用hibernate 4,而我们的项目正在使用Hibernate Envers。该表在这一年中积累了很多数据。最近,企业制定了仅保留6个月审核数据的政策。

现在我的问题是我们可以使用本机查询从此_AUD表中删除数据吗?我想删除6个月以上的数据。

1 个答案:

答案 0 :(得分:3)

每个审核表在修订实体表上都有一个条目。该修订实体表具有修订日期信息。您可以使用该日期从该审核表中删除行。但是您需要使用修订实体表中的sometable_aud和sometable_aud中的id字段在修订实体表和rev(具有实体版本)之间进行联接。 / p>

如果您有这样的修订版实体:

@Entity
@RevisionEntity(RevisionEntityListener.class)
public class RevEntity {

    @Id
    @GeneratedValue
    @RevisionNumber
    private int id;

    @Column(name = "revision_date", nullable = false)
    @RevisionTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    private Date revisionDate;

}

您可以在本机查询上使用此SQL:

String sql = "DELETE sometable_aud 
FROM   sometable_aud sometable_aud 
       JOIN sometable sometable 
         ON sometable.id = sometable_aud.id 
       JOIN rev_entity rev_entity 
         ON sometable_aud.rev = rev_entity.id 
WHERE  rev_entity.revision_date > '2018-06-18 00:00:00.0000000'";
entityManager.executeUpdate(sql);