0

以下の 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でこれを達成する方法はありますか?

4

1 に答える 1

0

最新のリビジョンを照会すると、最新のデータが取得されます。履歴リビジョンを照会すると、履歴データが取得されます。これが監査の全体的な考え方です。リビジョンは一貫した DB 状態をキャプチャし、各リビジョンはコミットに対応します。

于 2013-10-02T06:47:10.037 に答える