問題を正確に説明しようとします。
(コレクション)と1 対多の関係をA持つエンティティがあります。B
また、エンティティBはエンティティmany-to-manyと関係がありますC。
タイプ の一時オブジェクトを最初に保存すると、と関連付けられた関連する一時エンティティ インスタンスAの両方がデータベースに正しく作成されますが、 に関連付けられた一時インスタンスは作成されません。ABACB
多対多の関連付けは、関連付けの両側で次のようにマッピングされます (コードによるマッピング アプローチ)。
// Mapping for collection of Entity C on Entity B
@class.Set
(
entityB => entityB.EntityCList,
map =>
{
map.Table("EntitiesBInEntitiesC");
map.Cascade(Cascade.All);
map.Key(key => key.Column("EntityBId"));
map.Inverse(false);
},
map => map.ManyToMany(relMap => relMap.Column("EntityCId"))
);
// Mapping for collection of Entity B on Entity C
@class.Set
(
entityB => entityB.EntityBList,
map =>
{
map.Table("EntitiesBInEntitiesC");
map.Cascade(Cascade.All);
map.Key(key => key.Column("EntityCId"));
map.Inverse(true);
},
map => map.ManyToMany(relMap => relMap.Column("EntityBId"))
);
また、両方ともまだ一時的なオブジェクトであるエンティティBとエンティティがインスタンス化されると、エンティティのコレクションにエンティティの 1 つを追加し、その逆も行います。CBC
最後に、トランザクションは正常に終了します。これは、エンティティAとB、およびそれらの関連付けが期待どおりにデータベースに格納されていることを意味します。
エンティティのC関連付けがデータベースに保持されないのはなぜですか? 私は何を間違っていますか?
注: NHibernate 3.x シリーズの最新バージョンを使用しています。
注 2: SQL Server データベースのプロファイルを作成したところ、m:n テーブルへの挿入は実行されません。