【发布时间】:2016-11-25 13:12:02
【问题描述】:
我有两个表,第一个表包含 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;
但是当我得到 company 对象时,它在 companyDetails 中包含 null。
以下用于获取公司对象的代码:-
Company company = (Company) session.get(Company.class, companyId);
我想将 companyDetails 数据与公司数据一起获取。
我做错了吗? 解决此问题需要更改哪些代码。
【问题讨论】:
-
您的字段是
CompanyCaptiveDetails的私有类,但您的 POJO 名为CompanyDetail。请解释一下 -
抱歉,我已经更正了我的问题。现在请看
-
阅读有关双向关联的休眠文档。一侧(没有外键的一侧)必须是另一侧的倒数,使用 mappedBy。在您的映射中,您定义了两个单独的一对一关联。而且您说 company.company_id 是 company_detail.id 的连接列(即外键),这是不正确的。我真的不明白这两个表的意义。您可以将所有内容都放在 company 表中。
标签: java hibernate spring-mvc hibernate-annotations