1

与えられた2つのテーブル:

 ___________
|Table1     |
|-----------|
|Id         |
|___________|
 ___________
|Table2     |
|-----------|
|Id         |
|Table1_Id  |
|___________|

Table2レコードが必ずしも存在する必要がない場合(つまり、関係はOne {Table1}-to-OneOrZero {Table2}です)。

Table1にマップされている親クラスを使用して、両方のテーブルからデータを保存および取得できるようにする必要があります。

エンティティは次のとおりです。

public class Table1
{
   int Id {get; set;}
   Table2 Table2 {get; set;}
}
public class Table2
{
   int Id {get; set;}
}

...次のようにマッピングを作成しました。

public class Table1Map
{
   this.Id(x => x.Id);
   HasOne(x => x.Table2).Cascade.All();
}

public class Table2Map
{
   this.Id(x => x.Id);
}

...これはデータの読み取りには問題なく機能しますが、プロパティTable2.Table1_Idから取得する代わりに列にNULLを挿入しようとするため、データの書き込みには機能しません。Table1.Id

双方向参照を作成せずに、つまりTable1プロパティを使用せずに、挿入に対してこれを機能させる方法はありTable2 classますか?

4

2 に答える 2

0

私は最近、SOでこの質問に出くわしました。関係に関する限り、@Hacked で既に述べたように、共通の主キーを共有していないため、HasOne にすることはできません。HasMany の使用を検討してください (よくわかりません)。単方向関係の欠落部分は次のとおりです。Not.KeyUpdate

public class Table1Map
{
   this.Id(x => x.Id);
   HasMany(x => x.Table2)
   .Not.KeyUpdate() <--here
   .Cascade.All();   
}

以下、参考リンク

一方向の1対多の関係のためのHibernate構成

Hibernate は挿入後に更新を発行します

于 2012-12-18T15:30:22.163 に答える
-1

通常は、 ではReferencesなくを使用しますHasOne私はあなたが多対一を意味していると思います、先生。

記事の要約: HasOne、または 1 対 1 の関係は、特に 2 つのテーブルが主キーを共有する関係用です。

于 2012-12-18T14:07:15.640 に答える