我在两个类之间有@OneToOne
关系,具有以下结构:
ClassA是PendingActionJobs:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Pending_Actions_Detail_Fk")
public PendingActionDetails getActionDetailsFk() {
return actionDetailsFk;
}
public void setActionDetailsFk(PendingActionDetails aActionDetailsFk) {
actionDetailsFk = aActionDetailsFk;
}
ClassB被称为PendingActionDetails:
@OneToOne(mappedBy = "actionDetailsFk", fetch = FetchType.LAZY)
public PendingActionJobs getPendingJob() {
return pendingJob;
}
public void setPendingJob(PendingActionJobs aPendingJob) {
pendingJob = aPendingJob;
}
因此,挂起的操作作业表对PendingActionsDetail表中的主键具有FK。 PendingActionJobs表有许多重复的Fks,它们映射到详细信息表中的某些pk,如:
Pk FK to the PendingActionsDetail
2 1
3 1
4 1
5 1
6 1
7 1
The PendingActionsDetail has only one primary key like:
Pk
1
当我打电话
createQuery("from PendingActionDetails details LEFT JOIN FETCH details.pendingJob")
它检索集合但是当我尝试从另一端获取数据时,即从FK表中获取数据
createQuery("from PendingActionJobs jobs LEFT JOIN FETCH jobs.actionDetailsFk")
它说 - 多个行具有与PendingActionJobs类相同的标识符。等效的sql语句应为:
select * from Pending_Actions_Job jobs
left join
Pending_Actions_Details details
on jobs.Pending_Actions_Detail_Fk =
details.Pending_Actions_Details_Primary_Key
但为什么hibernate会抛出错误?我想用PendingActionDetails Pk中的数据填充每个PendingActionJobs FK的行。它为什么抱怨?换句话说,我无法从双方获取数据,但我必须使用PendingActionsDetails类?
答案 0 :(得分:0)
根据您解释的方案,您需要 OneToMany 映射而不是 OneToOne 。完成两个映射的定义。
OneToOne制图
Java中的OneToOne
关系是源对象具有引用另一个目标对象的属性的位置,并且(如果)该目标对象具有与源对象的反向关系,它也将是{{1}关系。
OneToMany Mapping
Java中的OneToOne
关系是源对象具有存储目标对象集合的属性的位置,如果这些目标对象具有与源对象的反向关系,则它将是ManyToOne关系。
要解决此问题,请更新 PendingActionDetails 类以存储PendingActionDetails列表,如下所示,或确保每OneToMany
只存在一个PendingActionJobs
。
PendingActionDetails