带有joincolumn的@OneToOne映射

时间:2015-08-06 13:22:23

标签: java hibernate orm one-to-one

我在两个类之间有@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类?

1 个答案:

答案 0 :(得分:0)

根据您解释的方案,您需要 OneToMany 映射而不是 OneToOne 。完成两个映射的定义。

OneToOne制图

Java中的OneToOne关系是源对象具有引用另一个目标对象的属性的位置,并且(如果)该目标对象具有与源对象的反向关系,它也将是{{1}关系。

OneToMany Mapping

Java中的OneToOne关系是源对象具有存储目标对象集合的属性的位置,如果这些目标对象具有与源对象的反向关系,则它将是ManyToOne关系。

要解决此问题,请更新 PendingActionDetails 类以存储PendingActionDetails列表,如下所示,或确保每OneToMany只存在一个PendingActionJobs

PendingActionDetails