0

Hibernate Envers を使用していくつかのエンティティを監査しています。関連する監査テーブルを手動で作成しました。しかし、監査テーブルの主キーがどうあるべきかを判断するのに苦労しています。たとえば、顧客を格納するために設計された架空のテーブルを考えてみましょう。

CREATE TABLE CUSTOMER
(
    CUSTOMER_ID   INTEGER,
    CUSTOMER_NAME VARCHAR(100),

    PRIMARY KEY (CUSTOMER_ID)
)

そして、監査テーブルを作成します。

CREATE TABLE CUSTOMER_REVISION
(
    REVISION_ID      INTEGER,
    REVISION_TYPE_ID INTEGER,
    CUSTOMER_ID      INTEGER,
    CUSTOMER_NAME    VARCHAR(100),

    PRIMARY KEY (???)
)

私が検討したオプションは次のとおりです。

主キー:REVISION_ID

同じリビジョン中に同じクラスの複数のエンティティが変更される可能性があるため、これを主キーにすることはできません。

主キー: ( REVISION_ID, CUSTOMER_ID)

これは可能性が高いようですが、Envers がリビジョンごとに顧客ごとに複数のレコードを挿入するかどうかはわかりません。

主キー: ( REVISION_ID, REVISION_TYPE_ID, CUSTOMER_ID)

これはやり過ぎのように思えますが、Envers がリビジョンごとに顧客ごとに異なるタイプのレコード ( addmodifyまたは) を挿入する可能性があります。delete

主キー: 新しい列

おそらく、主キーは、合成主キーを含む別の列でなければなりません。


Hibernate Envers によって管理される監査テーブルの真の主キーは何ですか?

4

2 に答える 2

1

ドキュメントの例から判断すると、私の例の主キーは( REVISION_ID、 )であるように見えますCUSTOMER_ID。ドキュメントの例は次のとおりです。

create table Address (
    id integer generated by default as identity (start with 1),
    flatNumber integer,
    houseNumber integer,
    streetName varchar(255),
    primary key (id)
);

create table Address_AUD (
    id integer not null,
    REV integer not null,
    flatNumber integer,
    houseNumber integer,
    streetName varchar(255),
    REVTYPE tinyint,
    ***primary key (id, REV)***
);
于 2012-04-27T12:57:35.900 に答える