我有两个表,第一个表包含 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;
在公司详细信息 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 数据与公司数据一起获取。
我做错了什么吗? 需要更改哪些代码才能解决此问题。
最佳答案
使用双向 @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();
关于java - Hibernate一对一映射不获取父类的子类数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805889/