0

NHibernate 3 と MySQL の Castle.ActiveRecord を実行する ASP.NET MVC 3 C# プロジェクトがあり、このチュートリアルで動作するように「要求ごとに 1 つのセッション」を取得しようとしています。

そして、それはいくつかのものでうまくいくようですが、そうするとSaveAndFlush()、コマンドはエラーを出します:

A different object with the same identifier value 
was already associated with the session: 142

そして、実行しようとするとSave()、同じメッセージが表示されるため、関数とは関係ありませんFlush()

検索するといくつかの結果が見つかりましたが、それを機能させるために使用できるものはありません。

自分のやり方がわからないのでテストしていないのは、

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")

何か案は?

4

1 に答える 1

1

Save()基本的に、問題は、既に存在するオブジェクトを使用しようとしていることにある可能性があります。オブジェクトに識別子がすでに設定されている場合 ( object.Id = 142)、オブジェクトを保存する必要はありません。

それに変更を加え、それらの変更を保存する必要がある場合は、Update()(@OskarBerggren で言及されているように) メソッドを使用SaveOrUpdate()するか、オブジェクトを保存するか更新するかを基本的にチェックして決定する必要があります。あなたの場合、最後のものが最もうまくいくかもしれません。あなたの現在を変え、

session.Save(object);

に、

session.SaveOrUpdate(object);

Sessionオブジェクトは NHibernate のSessionFactory実装からのものです。ただし、 を使用してActiveRecordMediatorいるようですので、使用できます。

ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()

Sessionモデルを保存するために使用できるを作成します。

于 2013-01-18T15:21:16.743 に答える