2

参照整合性やキーのないレガシーデータベースがあり、すべての外部アクセスにストアドプロシージャを使用している場合、nHibernateを使用してエンティティ(オブジェクトグラフ)を永続化することに意味はありますか?

さらに、SPにはCRUD操作だけでなく、ビジネスロジックも含まれています...

カスタムado.netDALを使用する方が簡単だと思い始めています:(

乾杯

Ollie

4

2 に答える 2

1

あなたはおそらくできます。しかし、おそらくすべきではありません:-)

Hibernateは参照整合性自体を気にしません。明らかに、関連付けられたテーブル間に何らかのリンクが必要ですが、実際のFK制約が存在するかどうかは関係ありません。たとえば、Productがに関してマップされmany-to-oneている場合VendorPRODUCTSテーブルには何らかの種類がVENDOR_ID含まれている必要がありますが、FKである必要はありません。

SP署名によっては、マッピングでカスタムCRUDとして使用できる場合とできない場合があります。SPに実際にすべてのCRUD操作中に適用されるビジネスロジックが含まれている場合、それが最初の潜在的な問題である可能性があります。

最後に、SPが実際にすべてのCRUD操作(すべての可能なクエリを含む)に使用されている場合、Hibernateをミックスに導入することはおそらく価値がありません-ほとんど何も得られず、さらに別のレイヤーがあります対処する。

于 2009-08-26T17:28:12.267 に答える
0

さて、問題の例はこれです:

SPは、次のようなsqlステートメントを使用して、テーブルの「Id」列に挿入される次のIDを選択します(この列は単なるint列であり、ID列ではありません)。

ステートメント:'顧客から@cus_id= max(id)+ 1を選択'、

したがって、次のIDが計算されると、他のデータとともにテーブルAに挿入され、次にテーブルAの別の列にテーブルA(外部キー制約なし)への参照がある行がテーブルBに挿入され、最後に行が挿入されますテーブルAと同じ参照を使用してテーブルCに追加します。

流暢なNHを使用してこれをNHにマップすると、マップは最初のテーブルに対して正しい「挿入」SQLステートメントを生成しましたが、2番目のテーブルが「参照」としてマップされた場合、「更新」SQLステートメントが生成されました。 '挿入'ステートメント..。

ID列、キー、参照整合性がないという事実は、関係が1対1、1対多などであることを保証できないことを意味します...

これが当てはまる場合、NH(流暢)はどのように構成できますか...

乾杯

Ollie

于 2009-08-26T20:33:52.780 に答える