1

次のコードに従って、1 対 1 でマップされたエンティティがあります。

@Entity
@Table(name = "my_entity")
public class MyEntity
{
    ...
    @OneToOne
    @JoinColumn(name = "site_id")
    private Site site;
    ...
}

サイト テーブル内に存在しない可能性がある「site_id」の値を含む MyEntity エントリの格納を開始する必要があると言われたところです。「site_id」の値を保存する必要がありますが、サイト エンティティと一致しません。

私が考えることができる唯一のことは、サイト テーブルに一対一/結合をマップしない同じテーブルにマップされるエンティティの 2 番目のタイプを作成することです。

同じテーブルに 2 番目のマップされたオブジェクトを作成せずにこれを行う方法はありますか?

ありがとう、ポール。

4

1 に答える 1

3

これは非常に悪いデザインです。外部キーは外部キーである必要があり、存在しない行を指してはなりません。データ/デザインを修正します。

本当にできない場合は、ここで説明するNotFoundアノテーションを使用してください。

デフォルトでは、予期された関連付けられた要素がデータベースにないためにHibernateが関連付けを解決できない場合(関連付け列のIDが間違っている)、Hibernateによって例外が発生します。これは、レガシースキーマや保守が不十分なスキーマには不便な場合があります。@NotFoundアノテーションを使用して例外を発生させる代わりに、そのような要素を無視するようにHibernateに要求できます。このアノテーションは、@ OneToOne(FKを使用)、@ ManyToOne、@ OneToMany、または@ManyToManyアソシエーションで使用できます。

于 2011-03-08T11:36:15.233 に答える