2011-08-26 14 views
0

プロパティ(INameTypeInfo)を持つ複合オブジェクトをマップしようとしています。このインタフェースは2つのクラス(PersonNameInfoとCompanyNameInfo)で実装されています。同じテーブル内のこれら3つの構造すべての情報。NHibernate:単一テーブル用のインタフェースを持つ複合オブジェクトのマッピング

オブジェクトは、次のようになります。

public class Name : Entity 
{ 
    public virtual string FirstName {get; set;} 

    public virtual string LastName {get; set;} 

    public virtual INameTypeInfo NameTypeInfo {get; set;} 

    etc... 
} 

他のオブジェクトは次のようになります。dbテーブルは次のようになります

public class PersonNameTypeInfo() 
{ 
    public string SSN {get; set;} 
    public string AKAFistName {get; set;} 
    public string AKALastName {get; set;} 
    etc... 
} 

public class CompanyNameTypeInfo() 
{ 
    public string FederalIDNumber {get; set;} 
    public string AKAName {get; set;} 
    etc... 
} 

  • 氏名
  • AKAFistName < ------情報が会社のためのものである場合、このフィールドは垢嘗
  • AKALastName
  • ために使用されるSSN
  • FID
  • CompanyContact

メモ:名前o bjectはParty:Name、Provider:Nameなどの他のオブジェクトにも継承されます。

データベースはすでに使用されている従来のデータベースです。

これを流暢にどのようにマップできるかの例は参考になります。

ありがとうございました。

+0

私はいつもしてきたことからちょうど会社をして、それはあなたにehw穴の会社のオブジェクトへのアクセスを提供する、休止状態はカスケードしている... – Kevin

+0

CompanyNameTypeInfoをマップするだけですか? –

+0

ええ、それは私がいつもやっていることです。 – Kevin

答えて

0
public class person 
{ 

// this is the table for person 
    private String name; 
    private String lastName; 
    private Company company; 


} 


public class Company 
{ 
    private string name; 
    private string address; 
    // more properties. 
} 

あなたが人を読み込むと、会社も利用できます。したがって、 Person.company.nameと言うと、名前を取得します。会社内の人物を変更すると、Hibernateはデータベースにコミットするときにすべての変更をカスケードします。

多分それはあなたの質問ではなく、思考のための食べ物です。

しかし、あなたがそれらを複合キーを作成したい場合は、むしろ人の内側に会社を持つよりも、第三の目的例

public class organization 
{ 
    private person person; 
    private company company; 
} 

を作ることができます。あなたが組織を取得するときには、人と会社の両方を取得する

関連する問題