我有两个表,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数据与公司数据结合在一起。
我做错了什么? 修复此问题需要哪些代码更改。答案 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;