私は(流暢な)nhibernateを使用していますが、少し問題があります。私のデータモデルは、別のオブジェクト(Obj1と呼ぶ)への1対多のリンクを持つユーザーオブジェクトを持つことです。 Obj1には、アプリケーションの外部にある主キーがあります。私はそれを自分の主キーとし、重複を許可するように変更することができますが、それは後でより多くの問題を引き起こします。Nhibernateデータオブジェクトにオブジェクトが追加、削除、追加されました
ユーザーはいつでも好きなときにObj1をプロファイルから追加したり削除することができ、各アクションが実行されるとすぐにデータレイヤーが呼び出されます。問題は、ユーザーがObj1を追加して削除してからもう一度追加すると、nhibernateが私にNonUniqueObjectExceptionを与えることです。
これは、追加される最初のObj1がまだnhibernateセッションでハングしているようだからです。
- 更新が行われたときにセッションをクリアし、ユーザーobjをリロードします。
- ここから:nhibernate : a different object with the same identifier value was already associated with the session: 2, of entity: - 更新のたびにセッションキャッシュからユーザーオブジェクトを削除します。
- Obj1を管理するための画面を書き直し、画面から離れたときにデータレイヤーを呼び出すようにします。
1と2はどちらかというと簡単ですが、両方ともちょっとハックされているようです。 3は「適切な」解決策のように見えるが、後で解決するのが難しい分野で同じ問題に遭遇する可能性があることを意味する。
質問には、これが最善の理由は何ですか?何らかの理由でこれらのソリューションが本当に悪いですか? (例えば、nhibernateキャッシュをマイクロマネージャーにしようとすると、私にとっては悪い考えです)
注:奇妙なことに、これを書いて、私は完全にわからないと確信しています。行く。私はまだ他の視点を聞くことに興味があるだろう。