Hibernate Envers: нет записи удаления в таблице аудита для каскадного удаления - PullRequest
0 голосов
/ 04 января 2011

Я использую Hibernate Envers для отслеживания всех изменений, внесенных в мои объекты базы данных.Эти объекты иногда связаны (однонаправленными) отношениями родитель-ребенок.Поскольку мне нужны запросы, которые должны перечислять все удаленные объекты, я полагаюсь на таблицу аудита для envers, чтобы пометить удаленные объекты (столбец revtype в таблице * _aud).Однако эти записи не создаются ни для одного из моих дочерних объектов, когда их родительский объект удаляется.

Мой класс объектов выглядит следующим образом:

@Entity
@Audited
public class MyClass {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(nullable = false, unique = false, length = 1024)
private String name;

    // An object can have exactly one parent, but multiple children
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private MyClass parent;

}

Я подозреваюэто как-то связано с действием каскадного удаления, которое каким-то образом обходит спящий режим hibernate.Как я могу добиться того, чтобы записи в таблице аудита для дочерних объектов создавались, и в то же время следить за тем, чтобы все дочерние элементы автоматически удалялись из базы данных при удалении родительского объекта, на который есть ссылка?

1 Ответ

2 голосов
/ 04 января 2011

Используете ли вы @OnDelete и для генерации DDL через Hibernate? Если это так, Hibernate добавит «каскадное удаление» в отношение, означающее, что удаление дочерних элементов будет происходить за пределами Hibernate. Таким образом, Envers (или Hibernate) не будет иметь доступа к этому событию, если не будет действовать в соответствии с этим.

...