以下の 2 つのエンティティがあり、変更を追跡したいとします。
@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 を使用してバージョニング用にさらに 2 つの dbTable を作成しました。
id=1 で name="Department1" の部門を指すテーブル オブジェクトがあるとします。次に、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
テーブルの最新リビジョンを照会すると、Department は常に現在のバージョンの Department を指します。ただし、部門を変更する前に、部門のスナップショットまたは状態を指すようにしたいと考えています。Enversでこれを達成する方法はありますか?