Hibernate 一对一映射不获取父 class 的子 class 数据

Hibernate One-to-One Mapping not fetching child class data with parent class

我有两个 table,第一个 table 包含 company_id、company_name 和国家名称,第二个 table 包含与公司相关的详细信息一对一映射。

这是我的 table 结构:-

    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 数据。

我做错了什么吗? 解决此问题需要更改哪些代码。

在两个 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;

使用双向 @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 对象后,您可以获得它的详细信息(因为 CompanyCompanyDetails 提交):

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