2017-07-28 3 views
0

JPAのSpring Boot/Spring Dataでは、エンティティクラスを設定したいと思います。JPA:エンティティを履歴化するためのキーの設定方法

ビジネス要件は、1年に1回存在する文書の処理を履歴化することです。

処理はバルクで実行されるので、すべての文書は一緒に処理されます。processingTimestampが各処理シーケンスのデータベース内のすべての文書に対して存在します。

その後、最も最近処理されたドキュメントのみにアクセスしたいが、以前に処理したドキュメントは参照用に保管したい。

は、私は、次の選択肢を参照してください。

  1. 使用複合キー

    @Id 
    private String documentId; 
    
    @Id 
    private String yearOfDocumentCreation; 
    
    @Id 
    private java.sql.Timestamp processingTimestamp; 
    
  2. 使用を自動的に生成されたキー

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 
    
    private String documentId; 
    
    private String yearOfDocumentCreation 
    
    private java.sql.Timestamp processingTimestamp; 
    
代替が優れている

/最高練習に関する

  1. 取り扱い(例:パフォーマンス

または私は他の選択肢/側面を欠場んが

  • )データベースから前に読まれ、データベース内の重複を避けたバルクとしてドキュメントのリストを保存しますか?

  • 答えて

    1

    このテーブルに外部キーを作成する必要がある場合は、1つのロング主キーを使用することをお勧めします。 デリゲートを避けるには、3つの必須列に一意の制約を設定できます。

    +0

    ありがとうございました!しかし、既存の '(documentId、yearOfDocumentCreation、processingTimestamp)'の組み合わせは、同じ値の組み合わせを持つ新しいエントリが永続化されると自動的に置き換えられるのですか? – user7468395

    +0

    同じユニークな制約を作成して、同じエントリを置き換えないようにすることができます。あなたがそれを置きたい場合は、3つの列がある場合は既存のエントリを見つけ、次に存在する場合は更新し、別の場合は新しいものを作成する必要があります。唯一の制約はインデックスであり、インデックスによって見つけ出すにはあまりにも高価ではありません。 –

    関連する問題