Hibernate One-to-One Mapping不使用父类获取子类数据

时间:2016-11-25 13:12:02

标签: java hibernate spring-mvc hibernate-annotations

我有两个表,1' st表包含company_id,company_name和国家/地区名称,第二个表包含公司相关的详细信息以及一对一的映射。

这是我的表结构: -

    company {
      company_id int,
      company_name varchar,
      country varchar
    }

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

在POJO中使用的映射之后: -

在公司POJO: -

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

在CompanyDetail POJO: -

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

但是当我得到公司对象时,它在companyDetails中包含null。

以下代码用于获取公司对象: -

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

我希望将companyDetails数据与公司数据结合在一起。

我做错了什么? 修复此问题需要哪些代码更改。

2 个答案:

答案 0 :(得分:3)

使用双向@OneToOne关系(请阅读more info):

// 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();

答案 1 :(得分:2)

在两个POJO中你都有:

@JoinColumn(name="COMPANY_ID")

您应该将其更改为

@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;