2009-07-18 3 views
0

私は、nhibernateがUsersやAddressesのようなテーブルをどのようにマッピングするかを理解しています。 nhibernateは、実際にはエンティティ自体ではないテーブルをどのように扱いますか?

しかし、私のようなテーブルがある場合:列のユーザーID、AndressIDと

Users_Addressesを。

このマッピングを作成して通常のエンティティのようにする必要がありますか?私が内部結合で参照するテーブルです。

答えて

4

NHibernateでは、データベースレイアウトとは独立してコードを設計します。データベースのテーブルやカラムとまったく同じクラスを作成する必要はありません(また、作成する必要はありません)。 例:ユーザーが複数のアドレスを持つことができ

  • public class User 
    { 
        public IList<Address> Addresses { get; private set; } 
    
        public int Id { get; set; } 
    } 
    

    マッピングは、どのようなアドレスとユーザーとの間の関係があるに依存しますか?

  • 複数のユーザーが同じアドレスを持つことはできますか?
  • あなたは何を内部結合したいですか?ユーザーが複数のアドレスを持っており、これらのアドレスは、異なるユーザによって使用することができたときには、マップするために、多くのマッピングに多く使用することができ、シナリオで

(私は多くの ここで、外との関係の参加に多くを期待します)住所・アドレス。 マッピングは、ユーザークラスとアドレスクラスの作成方法によっても異なります。

  • ユーザーのアドレス一覧を持つことは論理的ですか?
  • 住所にユーザーのリストを含めることは理にかなっていますか?
  • ユーザーは同じアドレスを2回使用できますか?

NHibernateのアイデアは、好きなようにコードを書いて、後でそれをデータベースにマッピングすることです。

0

あなたが議論しているシナリオでは、アドレスは通常値型とみなされます。ユーザーの外部に本質的な識別情報はありません。

nHibernateの値の型は、コンポーネントとしてマップされます。値型のコレクションは複合要素のセットとしてマップされます。

詳細は、https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/components.htmlを参照してください。

関連する問題