3

2 つのエンティティ間に多対多の関係があります。バッチ プロセスの一環として、これらのエンティティを多数作成し、それらを関連付けています。これは を使用していIStatelessSessionます。

NHibernate 3.0 を使用しています。

エンティティ:

class Entity1
{
    ICollection<Entity2> Entities { get; set; }
}

class Entity2
{
    ICollection<Entity1> Entities { get; set; }
}

基本的に、バッチ コードは次のようになります。

var entity1 = new Entity1();  
var entity2 = new Entity2();  

entity1.Entities.Add(entity2);  
entity2.Entities.Add(entity1);  

Session.Insert(entity1);   // IStatelessSession.Insert
Session.Insert(entity2);

2 つのエンティティは正しく永続化されますが、それらの間の関係テーブルは 2 つのエンティティ間の関係で更新されません。

これは、ステートレス セッションがオブジェクトを追跡しないという事実に関係していることを理解しています。しかし、多対多の永続性を実現するにはどうすればよいでしょうか?

4

1 に答える 1

1

コレクションは、ステートレス セッションでは無視されます。通常の ISession を使用ISession.Clearし、妥当な間隔で (たとえば 500 オブジェクトごとに) 呼び出す必要があります。この方法では、第 1 レベルのキャッシュが肥大化せず、適切なパフォーマンスが得られます。

于 2011-09-11T20:49:21.090 に答える