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
对象后,您可以获得它的详细信息(因为 Company
已 CompanyDetails
提交):
Company company = (Company) session.get(Company.class, companyId);
CompanyDetails details = company.getCompanyDetails();
我有两个 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
对象后,您可以获得它的详细信息(因为 Company
已 CompanyDetails
提交):
Company company = (Company) session.get(Company.class, companyId);
CompanyDetails details = company.getCompanyDetails();