問題タブ [nhibernate-cascade]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - Hibernate カスケードの問題
私はこのマッピングを1つのクラスに持っています:
そして、これは他のものです:
親では、コレクションに追加する現在のトランザクションにロードされます。
そして、トランザクションをコミットします。親への変更は update 呼び出しでデータベースに保存されますが、カスケード値または inverse=true/false/just-save-already に関係なく、それらの子を挿入することはできません。私はしばらくの間、例/ドキュメント/などを読んで頭を悩ませてきましたが、なぜうまくいかないのかわかりません。簡単なものがありませんか?サーバーを強制終了し、変更のたびに再構築して、更新されていることを確認してきましたが、.
さらに悪いことに、逆のさまざまな値を使用して、時には Request=parent を子に追加することによって、時には追加する前に子を個別に保存することによって、うまくいくことがあります...そして、後で作業を終了します。私は途方に暮れていますo_O
編集:これが投稿されてから明示的に試行されたもの、再構築+サーバーの再起動、いずれも挿入呼び出しまたはエラーを生成しません:
これはうまくいきました:
しかし、無視された場合、カスケードを設定する意味は何ですか?
編集:これを少し読んだ後:http://nhibernate.info/doc/nh/en/index.html#example-parentchild-bidir私が試した:
上記の6つの主要なものすべてで、運がありません。
c# - NHibernate / FluentNHibernateとの多対多の関係のカスケード更新を防止し、
UserクラスとPlaceクラスの間には単純な多対多の関係があります。この関係は、ユーザーの「Neighbourhood」プロパティによって表されます
UserPlaceクラスは、ユーザーとプレイスの関係に単一の情報を追加する単なるコンポーネントです。
関係は次のようにマップされます。
ユーザーが作成されると、いくつかのプレイスがデータベースから読み込まれ、ユーザーに追加されます。そのうちの1つがデフォルトに設定されています。ユーザーが永続化されると、関連付けられたUserPlaceエンティティも永続化されます。
私が経験している問題は、UserPlaceに関連付けられている各Placeエンティティも更新されることです。これは望ましい効果ではありません。CascadeをNone()に設定して、Cascade to Placeが発生しないようにしました(しゃれは意図されていません)...ただし、これによって何も変わりません。
Placeの各プロパティを更新しないように指定することで、この更新の実行を停止することができました([PropertyName] .Not.Updated())。これは機能しますが、解決策ではありません。
誰かがこれを防ぐ方法について何かアイデアがありますか?
編集:PlaceエンティティマッピングにはDynamicUpdate()も指定されているため、ユーザーが保存されたときにエンティティが実際に変更されることはありません。
PS!このシナリオに違いはないと思いますが(間違っているかもしれません!)、これも考慮してください:PlaceエンティティはNHibernateの外部にロードされます(地理空間クエリのため、ADO.NETとストアドプロシージャを使用します) NHibernateでは実行できませんでした)、各エンティティでSession.Update()を呼び出してセッションに接続しました。
mysql - 1対多の流暢なnhibernate自動マッピングは外部キーをnullにします
私はNHberinateに比較的慣れていないので、EFの代わりにNHberinateを使用しています。これは、Monoでうまく機能するためです。
すべてのエンティティはAutoMappingでマッピングされます。
問題は、1対多の関係を設定していることです。Itemクラスの1つにlocalizedTextクラスがあります。また、Cascadeallのコンベンションを設定しました。
LocalizedTextをItemクラスに追加すると、それはうまく機能し、localizedTextテーブルはテーブルに書き込まれた値を取得しますが、外部キー値「itemId」はnullのままです。ローカライズされたTextアイテムが追加されたときにobjectIdを持つようにするにはどうすればよいですか?
ザック
fluent-nhibernate - FluentNHibernateカスケード規則の問題-削除されたインスタンスが更新に渡されました
私は通常、次のような規則を使用して、すべてをカスケードするように設定しています。
FluentNHibernate自動マッピングも使用します。特定の保存順序などについて心配する必要がないため、通常は非常にうまく機能します。ただし、次のシナリオでは問題になることがわかっています。
したがって、新しいEnquiryを永続化する場合、サービスメソッドに保存する必要があるのは、CompletedQuestionnaireが設定されたInquiryのインスタンスであり、QuestionAnswerインスタンスのコレクションがあります。そこに問題はありません。
ただし、それらの質問の回答も更新したいと思います。この場合、InquiryとCompletedQuestionnaireは同じままである必要があります。発生する必要があるのは、すべての質問の回答を削除し、新しい質問の回答を作成することです(そのリストのサイズが拡大または縮小するため)。
したがって、サービス方法は次のとおりです。
これを行うことで得られるのは、「削除されたインスタンスが更新に渡されました」というエラーです。NHibernateソースコードでこの例外の参照を見つけただけです。IOneToManyCollectionInstanceでカスケードをAllまたはUpdateAndSaveに変更しようとすると、NHibernateはQuestionAnswerレコードのCompletedQuestionnaire外部キーをnullに更新しようとしますが、nullは許可されていないため失敗します。コードの順序に従って削除ステートメントがこれより前に実行される場合、これは問題にはなりませんが、奇妙なことにこれは発生しません。
また、1対多のカスケードをDeleteOrphanに設定してみました。これにより、同じ削除されたインスタンスに渡された例外が発生します。
上記のサービス方法は、実際には試行錯誤の結果です。「あなたはそれを間違っている!」についての洞察と説明をいただければ幸いです。
NHiberanteで実行されるステートメントの順序を制御することは可能ですか?DeleteBeforeUpdateなどの規則を言いますか?
編集:私はサービスメソッドを次のように作り直しました:
また、関連するカスケード規則を次のように変更しました。
「削除されたオブジェクトはカスケードによって再保存されます(削除されたオブジェクトを関連付けから削除します)」という例外が発生します。オブジェクトを関連付けから正しく削除するにはどうすればよいでしょうか。
c# - nhibernate のコレクション カスケード型
私は NHibernate 3.2 を使用しており、Mapping by Code を使用しています。
テスト ケースは非常に簡単です。多対多のコレクションでリンクされた Store と Product があります。StoreMap の多対多コレクションは、次のようにマップされます。
私が正しければ、カスケード オプションを使用すると、クラスの操作をコレクションにもカスケードするかどうかを選択できるはずです。NHibernate 3.2 では、これらのオプションを使用できますが、これは私にとっては簡単ではありません。
私が使用している例は次のとおりです。ここでは、テスト ストアとテスト製品を作成し、それをストアに割り当てています。次に、ストアをリロードし、最初の製品を取得して更新し、ストアを保存しています。
カスケードが「なし」に設定されていても、製品は更新されます! これが起こるのは普通ですか?
c# - カスケードのエラー: 削除されたオブジェクトはカスケードによって再保存されます
私はNHibernateの実装と遅延読み込みを使用したプロジェクトを持っています。このプロジェクトには、Person と Family の 2 つのクラスがあります。これらの 2 つの関係は集計であり、Person が Person のリストを持つことを意味します。マッピングは次のとおりです。
このプロジェクトでは、ID で人を取得してから、家族の家族の人を削除します。
このメッセージで例外がスローされるため、ファミリは削除されませんでした:
deleted object would be re-saved by cascade (remove deleted object from associations)[Domain.Entities.Family#167]
個人の家族を削除するにはどうすればよいですか?
c# - カスケードのエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられていました
NHibernateの実装とLazyLoadingを使用したプロジェクトがあります。このプロジェクトには、人と家族の2つのクラスがあります。これら2つの関係は集約であり、人が家族のリストを持っていることを意味します。マッピングは:
このプロジェクトでは、IDで人を取得してから、家族の人の家族を更新します。
ファミリは更新されていません。このメッセージによって例外がスローされるためです: `同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられています:193、エンティティ:Domain.Entities.Family
家族を更新するにはどうすればよいですか?
nhibernate - nhibernate でカスケードを使用してコレクションを削除するには?
私はこのマッピングを持っています
今、私は国を削除したいと考えています。国を削除すると、すべてのカードが削除されます。すべての報酬を削除する必要があります。
私がこれをするとき。次のエラーが表示されます。
削除が発生したときに更新を実行しようとするのはなぜですか?
nhibernate - 多対多の関係で削除するには?
私は多対多の関係を持っています:
製品には多くのカテゴリがあり、カテゴリには多くの製品があります。
私が持っていると言う
今私は削除しShopping Category
ます。Product A
参照を削除してShopping Category
、Product B
完全に削除したい。
私は次のようになります:
nhibernate でこれを行うにはどうすればよいですか (流暢な nhibernate を使用しています)。
Cascade を使用しようとしましDeleteOrphan
たAllDeleteOrphan
が、それを行ってショッピングを削除すると、商品 A と B の両方が削除されます。
c# - NHibernate CascadeDeleteOrphanが自動マッピングで機能しない
NHibernateに孤立したレコードを削除させるためのいくつかの解決策を試しました。次の構造が与えられます:
更新: それはセッターとは何の関係もありませんでした。これにより、他の問題が発生し、修正されました。しかし、孤児の削除はまだ発生しません。私は次のことを試しました。
http://mookid.dk/oncode/archives/643に従って、ドメイン(およびドメインクラスのParentプロパティ)に属性を追加します
次のような自動マッピングを追加しました:
/li>
どちらの場合も、ドメインレコードはParent_Id=nullで保存されていました。
自動マッピングと組み合わせてこれを実現する方法についての良い例はありますか?