2012-01-31 10 views
0

は、私は2つのテーブルを持っている:外部キーオブジェクトを取得するための主な解決策は何ですか?

者:(ID、名前)

アドレス:(ID、住所、PERSONID)

それは一人一人が、いくつかのアドレスを有することを意味します。 私は各テーブルに関連するオブジェクトと各外部キーオブジェクトのプロパティを持っています。この例では:

Class Persons 
{ 
    int  id; 
    string name; 
} 

Class Addresses 
{ 
    int  id; 
    string address; 
    Persons person; 
} 

私は自分のアドレスを持つすべての人を取得したいとき、私は左の結合を使用します。私はAddressクラスのコレクションを作成し、 "person"プロパティを使用して各Personに到達します。

しかし、場合によっては住所を持たない人がいます。このメソッドを使用してオブジェクト内のその人にアクセスするにはどうすればよいですか。この状況に最適な方法は何ですか?

おかげで、

+0

を。 http://www.oracle.com/technetwork/articles/javaee/jpa-137156.html –

+0

私はこの方法をAndroidで使用しています – breceivemail

+0

クラスの名前は "Person"ではなく "Person"でなければなりません:) – Manish

答えて

0

私が検索し、このソリューションが見つかりました:あなたはJPAを使用していないのはなぜ

Class Persons 
{ 
    int  id; 
    string name; 
    AddressesCollection addresses; 
} 

Class Addresses 
{ 
    int  id; 
    string address; 
    Persons person; 
} 
0

あなたはアドレスを持っていないすべての人が含まれている人の集まりを必要としています。 また、ダミーアドレスを作成し、それを持たないすべてのPersonに関連付けることができます。あなたがやるべきことは何

+0

これは "Hacky"と聞きます – Manish

+0

これは構造的な解決策ではありません。 :| – breceivemail

+0

はい、ただし、結合を結合した左結合を使用してデータベースのハックを行うことができます。アドレスを使用してPersonにアクセスする場合は、ダミーアドレスが必要です。 –

0

は、現在のマッピングの逆であるすなわち、

Class Person 
{ 
    int  Id; 
    string name; 
    Address address; 
} 

Class Address 
{ 
    int  Id; 
    string Address; 
} 

この方法であなたは自分のアドレスに人をマッピングすることができます。一人の人が複数の住所を持っている場合は、住所のコレクションを使用することができます。

また、各オブジェクトは単一のエンティティを参照しているので、PersonではなくPersonのようなクラス名を特異なものにしてください。

関連する問題