2016-11-25 7 views
2

2つのテーブルがあり、1番目のテーブルにはcompany_id、company_name、国名が含まれ、2番目のテーブルには1対1マッピングの会社関連の詳細が含まれます。親クラスの子クラスデータをフェッチしないHibernate 1対1マッピング

これは私のテーブル構造である: - :会社POJOで

: - - CompanyDetail POJOで

@OneToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER) 
@JoinColumn(name="COMPANY_ID") 
private CompanyDetails companyDetails; 

: -

@OneToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL) 
@JoinColumn(name="COMPANY_ID") 
public Company company; 
POJOに使用されるマッピング後

company { 
     company_id int, 
     company_name varchar, 
     country varchar 
    } 

    company_detail { 
     id int, 
     company_id int, 
     company_description text, 
     future_goal text 
    } 

しかし、会社のオブジェクトにcompanyDetailsのnullが含まれていると、会社オブジェクトを取得するために使用されるコードに続いて

: -

Company company = (Company) session.get(Company.class, companyId); 

私は会社のデータと一緒にcompanyDetailsデータを取得したいです。

私は何か間違っていますか? この問題を解決するために必要なコードの変更。あなたが持っている両方のPOJOで

+0

あなたのフィールドは 'CompanyCaptiveDetails'のプライベートなクラスですが、あなたのPOJOが' CompanyDetail'命名されます。説明してください – henrik

+0

申し訳ありませんが、私は私の質問を修正しました。今すぐ見てください –

+0

双方向関連についてのhibernateのドキュメントを読んでください。一方の側(外部キーを持たない側)はmappedByを使用してもう一方の側の逆でなければなりません。マッピングでは、2つの個別の1対1関連を定義します。 company.company_idがcompany_detail.idへの結合列(つまり外部キー)であることを示していますが、これは真ではありません。私は本当にこれらの2つのテーブルのポイントを見ていない。すべてを会社のテーブルに置くことができます。 –

答えて

3

にこれを変更する必要があります。

// in Company POJO: 
@OneToOne(mappedBy="company", cascade=CascadeType.ALL, fetch = FetchType.EAGER) 
private CompanyDetails companyDetails 

// in CompanyDetails POJO: 
@OneToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL) 
@JoinColumn(name="company_id") 
public Company company; 

その後companyオブジェクトを取得した後、あなたは(Companyが提出CompanyDetailsを持っているとして)それは詳細だ得ることができます。

Company company = (Company) session.get(Company.class, companyId); 
CompanyDetails details = company.getCompanyDetails(); 
+0

ありがとうございます。 –

2

@JoinColumn(name="COMPANY_ID") 

あなたは双方向@OneToOne関係(それについてmore infoを読んで)使用

@OneToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "company") 
private CompanyDetails companyDetails; 

@OneToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL) 
@JoinColumn(name="COMPANY_ID") 
public Company company; 
+0

ありがとうございます。 –

関連する問題