0

최대 절전 모드를 사용하여 데이터베이스 개체에 대한 모든 변경 사항을 추적하고 있습니다. 이러한 객체는 때때로 (단방향) 부모 - 자식 관계에 의해 관련됩니다. 삭제 된 개체를 모두 나열해야하는 쿼리가 필요하므로 삭제 된 개체 (* _aud 테이블의 revtype 열)를 표시하는 데 사용되는 감사 테이블을 사용하고 있습니다. 그러나 부모 개체가 삭제되면 내 자식 개체에 대해 이러한 항목이 만들어지지 않은 것처럼 보입니다.Hibernate Envers : 계단식 삭제를위한 감사 테이블에서 No 항목을 삭제하지 않습니다.

내 객체 클래스는 다음과 같습니다

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

} 

내가 의심하고있어 어떻게 든 envers를 최대 절전 모드로 우회 조치를 삭제 캐스케이드 함께 할 수있는 뭔가가. 참조 된 부모가 삭제 될 때 모든 자식이 데이터베이스에 의해 자동으로 삭제된다는 것을 확인하면서 자식 객체에 대한 감사 테이블의 항목이 생성된다는 것을 어떻게 알 수 있습니까?

+0

사용중인 Hibernate와 Envers의 버전은 무엇입니까? – jpkrohling

+0

현재, 3.5.2 절은 Hibernate 배포를 사용하고 있습니다. 방금 3.5.6을 시도했지만 동일한 결과가 나타납니다. –

답변

2

@OnDelete 은 최대 절전 모드를 통해 DDL을 생성합니까? 그렇다면, Hibernate는 관계에 대해 "계단식 삭제"를 추가 할 것이다. 이는 자식들의 삭제가 Hibernate 외부에서 일어난다는 것을 의미한다. 따라서 Envers (또는 Hibernate)는이 이벤트에 액세스 할 수 없으므로이를 수행하지 못합니다.

+0

예, DDL 스키마는 Hibernate를 통해 생성되고 관계에 대한 삭제 규칙은 "cascade"입니다. 삭제 이벤트에 대한 액세스 권한이없는 사용자는 내가 의심했던 것입니다. 그렇다면이 일을 올바르게하는 방법은 무엇입니까? –

+0

나는 자식 관점에서 표시하기 때문에 이벤트가 계단식으로 나타나지 않는다고 생각합니다. 그래서'@OneToMany (cascade = CascadeType.ALL, mappedBy = "parent")'주석이 붙은 속성'private list children '을 추가 할 것입니다. 그런 다음 부모를 삭제할 때마다 자녀도 삭제됩니다. – jpkrohling

+0

몇 가지 생각을 해본 결과 아이들을 프로그래밍 방식으로 삭제하기로 결정했습니다. 삭제 될 때 아이들을 확인해야하는 몇 가지 다른 문제가 있기 때문입니다. 어쨌든, 도와 줘서 고마워. –