4

NHibernateマッピングで設定できる理由を誰かに教えaccess="field.camelcase"てもらえますか?access="field"access="property"

編集:私の質問は、「それが何を意味するのか」ではなく、「なぜこれができるのか」です。これは開発者にとってエラーの原因になると思います。

4

3 に答える 3

5

フィールドだけで同じことができるのに、field.camelcaseはどのように使用されるのでしょうか。それは本当ですが、たとえばクエリを記述したり、他のマッピングからプロパティを参照したりすると、(NH)プロパティに直感的でない名前が付けられます。

フィールドを使用してマッピングしたいものがあるとしましょう。

private string _name;
public string Name { get { return _name; } }

「field」を使用してフィールドをマップすることはできますが、HQLクエリを作成する場合などは「_name」を作成する必要があります。

select a from Foo a where a._name = ...

代わりにfield.camelcaseデータを使用すると、同じクエリは次のようになります。

select a from Foo a where a.Name...

編集 あなたが「field.camelcase」と書いているのを見ましたが、私の答えは「field.camelcase-underscore」についてです。原則は同じで、私はあなたがポイントを得ると思います;)

于 2012-07-06T08:46:53.407 に答える
3

'。'の後の部分 はいわゆる命名戦略であり、hbmに書き込む名前がバッキングフィールドと異なる場合に指定する必要があります。あなたの場合、hbmfield.camelcaseに書き込むことが許可されており、NHibernateはクラス内CustomerNameで名前のあるフィールドを探します。customerNameその理由は、NHibernateが準拠する命名規則を選択することを強制しないためです。NHは、ほとんどすべての命名規則で機能します。

于 2012-07-06T08:40:18.300 に答える
0

NHが値を設定するのにプロパティが適していない場合があります。

彼らはかもしれません

  • セッターがまったくない
  • 設定されたデータの検証を呼び出します。これは、データベースからロードするときに使用されません。
  • 値がビジネスロジックによって変更された場合にのみ使用される他の処理を実行します(たとえば、他のプロパティを設定します)
  • 何らかの方法で値を変換します。これにより、NHが不要な更新を実行します。

次に、NHがプロパティセッターを呼び出さないようにします。フィールドをマッピングする代わりに、プロパティをマッピングしますが、値の読み取り/書き込み時にフィールドを使用するようにNHに指示します。Rogerは、プロパティのマッピングが良いことである理由を説明しています。

于 2012-07-06T08:54:16.490 に答える