Я использую hibernate 4, а наш проект использует Hibernate Envers. В этих таблицах за эти годы накоплено много данных. Недавно компания ввела политику хранения данных аудита только за 6 месяцев.
Теперь мой вопрос: можем ли мы удалить данные из этой таблицы _AUD с помощью собственного запроса. Я хочу удалить данные старше 6 месяцев.
Каждая таблица аудита имеет запись в таблице ревизионных сущностей. Эта таблица сущностей ревизии содержит информацию о дате ревизии. Вы можете использовать эту дату, чтобы удалить строки из этой таблицы аудита. Но вам необходимо выполнить соединение между таблицей сущностей ревизии и 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);
Не повлияет на вашу основную таблицу!
Привет, Энрике. Спасибо за помощь. удаление этих данных повлияет на мои основные таблицы. Моя таблица - XYZ, а моя таблица аудита - XYZ_AUD, удалит ли данные из XYZ_AUD, эффективность моей таблицы XYZ?