マッピング・ツールでは、1 つの列をデータベース内で 2 回 (1 回は属性として、もう 1 回は関係役割として) マップできる場合があります。これをマッピングにおけるオーバーラップと呼びます。このオーバーラップにより、データ保全性の問題が生じることがあります。そのため、データベース・エレメントへのマッピングの重複を回避する必要があります。
マッピング・ツールで作成されることのあるオーバーラップ・マッピングについて、次の例を考えてください。
- Bean1 には Table1 の PK1 (主キー) 列にマップされるキー・フィールドがあり、Bean2 には Table2 の PK2 列にマップされるキー・フィールドがあります。
Table2 には FK2 (外部キー) 列があり、Table1 の PK1 列を指しています。
Bean1 と Bean2 間に関係を作成し、Table2 の FK2 列を使用してこの関係をマップします。
- 次に、Bean2 の単純 CMP 属性を Table2 の FK2 列に直接マップします。こうすると、FK2 列は、2 回 (1 回はマップされた属性として、もう 1 回は 2 つの Bean 間のマップされた関係として) マップされることになります。列または表が変更されると、このオーバーラップが問題を招くことがあります。
- 例えば、Bean2 で setter を使用して FK2 列 (これも外部キーです) を変更してから、この変更を保存すると、次回に Bean を再ロードしたときにそれらの Bean の関係が変更されます。または、Bean2 が Bean1 の別のインスタンスを指すように関係を変更した場合は、Bean2 内の属性はその変更を反映しません。