2

大規模なレガシースキーマのマッピングに関するアドバイスを探しています。

これが状況です。BusinessTransactionというクラスがあるとします。このクラスには、ユーザーIDを参照するいくつかのフィールドがあります。

@Entity
public class BusinessTransaction implements Serializable {

    private Long id;
    private User createdBy;
    private User editedBy;
    private User cancelledBy;

    private String department;
    // etc 

}

public class User implements Serializable {
    private Long id;
    private String department;
    //etc
}

ただし、BusinessTransactionテーブルとUserテーブルの間に外部キーはありません。SQLでは、ユーザーは部門キーの左外部結合を介してBusinessTransactionに接続されます。

これらの外部キーを作成するには、結合テーブルを作成する必要があります。私たちのDBAは、外部キーまたは結合テーブルのいずれかを作成することを躊躇しており、作成する理由は理解できます(バッチスクリプトへの影響、アプリへの副作用の可能性など)。

私が持っていた他の唯一のアイデアは、JoinFormulaの使用でした。ただし、@ JoinFormulaには最高のドキュメントがありません。私の理解では、データは読み取り専用になります。

役に立つものを見落としていますか?

編集:部門を追加しました。

ジェイソン

4

1 に答える 1

5

Hibernateでこのテーブル間の関係を宣言するために、外部キーも結合テーブルも作成する必要はありません。Hibernateは、そのような外部キーが存在するかどうかを検証しません(データベーススキーマの検証を要求しない限り)。

ただし、Userテーブルに適切なインデックスが必要であることに注意してください。インデックスは外部キーからも独立していますが、インデックスを作成しないと、パフォーマンスが大幅に低下します。

ただし、外部キーが作成されていない場合、Userテーブルのキーが欠落していると、Hibernate側からの不確定な動作(エラー)が予想されることに注意する必要があります。外部キーは、データベースの整合性を保証するためのものです。

于 2012-06-18T21:14:58.743 に答える