Hibernate Envers: удаление данных из таблицы _AUD с использованием собственного запроса - PullRequest
0 голосов
/ 18 декабря 2018

Я использую hibernate 4, а наш проект использует Hibernate Envers.Эти таблицы накопили много данных за эти годы.Недавно компания провела политику хранения данных аудита только за 6 месяцев.

Теперь мой вопрос заключается в том, можем ли мы удалить данные из этой таблицы _AUD, используя собственный запрос.Я хочу удалить данные старше 6 месяцев.

1 Ответ

0 голосов
/ 18 декабря 2018

Каждая таблица аудита имеет запись в таблице объектов редакции.Эта таблица сущностей редакции содержит информацию о дате редакции.Вы можете использовать эту дату, чтобы удалить строки из этой таблицы аудита.Но вам нужно выполнить соединение между таблицей сущностей редакций и sometable_aud (которая имеет версии сущностей), используя id из таблицы сущностей редакций и поле rev из sometable_aud.

Еслиу вас есть такой объект ревизии:

@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);
...