2013-10-01 3 views
0

아래 두 엔티티가 있고 변경 내용을 추적하고 싶습니다.이전 개정판에서 관계 가져 오기

@Audited 
public class Table { 

    private String name; 

    @ManyToOne(fetch = FetchType.LAZY) 
    private Department department; 

    //getters and setter 
} 

@Audited 
public class Department { 

    private String name; 

    //getter and setter 
} 

@Audited를 사용하여 엔티티에 주석을 한 후 나는 table_aud과 department_aud과 버전에 대한 두 개 더 dbTables 있습니다.

id = 1이고 name = "Department1"인 department를 가리키는 table 객체가 있다고 가정 해 보겠습니다. 그런 다음 table1, table2, table3, table4 등의 테이블 이름을 변경했습니다. 그리고 table_aud에서 개정판을 봅니다. 내가 리비전 (특히 최근 리비전)을 쿼리 할 때 ID가 1 인 부서를 가리키고 있지만 부서의 현재 버전에 대해서는 테이블 객체를 얻습니다. 나는 이제

table.getId() -> 1 
table.getName() -> table3 
table.getDepartment().getId() -> 2 
table.getDepartment().getName() -> Department1 

가 지금은 Department2에 부서의 이름을 변경 같은 테이블의 이전 버전이 보이는 가정 해 봅시다 의미한다. 그리고 다시 테이블의 최신 버전을 찾아 내가 표를위한 최신 버전을 쿼리 할 때 내가

table.getId() -> 1 
table.getName() -> table3 
table.getDepartment().getId() -> 2 
table.getDepartment().getName() -> Department2 

얻을, 부서는 항상 부서의 현재 버전 가리 킵니다. 그러나 나는 그것을 변경하기 전에 그것이 부서 또는 스냅 샷을 가리 키기를 원한다. Envers와 함께 이것을 달성 할 수있는 방법이 있습니까?

답변

0

최신 개정판을 쿼리하면 최신 데이터를 얻을 수 있습니다. 히스토리 리비젼을 쿼리하면 히스토리 데이터를 얻을 수 있습니다. 이는 전체 감사 아이디어입니다. 수정본은 일관성있는 DB 상태를 캡처합니다. 각 수정본은 커밋과 일치합니다.

+0

네, 맞습니다. 내 문제는 내가 과거 데이터를 쿼리 할 때 관계를 제외하고 얻을 수 있다는 것이다. 관계는 역사적이지 않습니다. table-department 예제를 제공 한 경우 테이블 엔티티의 역사 버전을 쿼리 할 때 Department의 역사 버전을 얻지 못합니다. Historical Table 엔티티는 항상 Department 엔티티의 현재 개정을 가리 킵니다. 그것이 내가 의미했던 것입니다. – thetux4

+0

흠 매우 이상하게 보입니다. 원래의 객체를 검색 한 동일한 개정에서 모든 관계를 가져와야합니다. 올바른 버전 번호를 사용하고 있는지 확인하고 관계가 감사되었는지 확인하십시오. – adamw