0

私は、java、jpa2、spring、hibernateデータベースアプリケーションに照らして、基本的にエンティティのSCMのようなことを実行できるソリューションを探しています。複数のアプリケーションサーバーでホストされているデータベース駆動型のJavaエンタープライズアプリケーションがあります。これらのアプリケーションサーバーは、すべて同じJavaコードに基づいており、同じデータベースを使用するステートレスWebアプリケーション(REST APIなど)をホストします。このアプリケーションが提供するサービスの1つは、ファイル管理です。ユーザーは(さまざまなAPIクライアントおよびフロントエンドアプリケーションを介して)、ファイルおよびフォルダーの作成(アップロード)、削除、名前変更、移動を行うことができます。

今しばらくの間、ファイルバージョンの要件が出てきており、私はこの問題に最終的に取り組みたいと思っています。これは私がJavaエンティティに関して思いついたものです:

public class File {

    private String id;
    private ReadableInstant created;

    private List<FileVersion> versions;

}

public class FileVersion {

    private String name;
    private FileVersion parent;
    private List<FileVersion> children;
    private ReadableInstant modified;
    private FileOperation operation;

}

public enum FileOperation {

    CREATE,
    RENAME,
    UPDATE,
    DELETE

}

私は、委任を通じて直接Fileではなく、公開する予定です。FileVersionこれを機能させるには、「ヘッド」バージョン(バージョンコレクションの最後のエントリ)を取得するための簡単な方法が必要です。基本的に、上のすべての書き込み操作は、その時点での「ヘッド」に基づいてFile新しいものを作成する必要があります。FileVersion複数のアプリケーションサーバーが同じデータベースにアクセスしていることを考えると、それぞれのFileエンティティをロックできる方法があるかどうかはわかりません(行レベルのロック?)。これにより、新しいファイルバージョンを正しい「頭」に基づいて作成できます。 "。

私が持っていたもう1つの考えは、クライアントに、変更の基になっているある種のバージョン識別子を提供させることでした。FileVersion永続化時にこのバージョン識別子が特定のバージョンの最新のものと一致しない場合File、アプリケーションは変更を拒否する必要があります...

私はこれで正しい方向に進んでいますか、それとも私のアプローチは失敗したと見なされますか?

4

1 に答える 1

1

「head」値のみを持つ1つのテーブル(通常のテーブルと同じ)と、すべての変更のジャーナルを持つ2番目のテーブルがあります。これにより、以前のバージョンも取得できるようになります。ジャーナルテーブルを更新するトリガーを作成するか、Javaで実行できます。

于 2012-07-29T10:11:33.800 に答える