如何将两个外键映射到Hibernate中的同一主键列(一对一)?

时间:2011-04-22 09:46:16

标签: hibernate orm jpa

我是Java和Hibernate的新手,我正在尝试在Hibernate中映射以下场景(使用注释)。

我正在处理以下两个表(与某些ETL类型的任务相关)。

任务
| -TaskId
| -SourceDatabase(FK到数据库表)
| -TargetDatabase(FK到数据库表)

数据库
 | -DatabaseId(PK)
| -TaskId(FK到Tasks表)
| - 其他数据库详细信息。

每个任务都有一个sourceDatabase和一个targetDatabase。此外,每个数据库都与仅一个任务相关。 如何使用一对一映射在Hibernate中映射到此模型。

@Entity
public class Task implements Serializable
{
    @Id
    int taskId;

    //How to map  using one-to-one mapping??
    Database sourceDB;
    //how to map  using one-to-one mapping??
    Database targetDB;
}

@Entity
public class Database implements Serializable
{
    @Id
    int databaseId;

    //How to map using one-to-one mapping??
    Task task;  
}

我已从上面的代码示例中删除了所有不必要的代码。 在此先感谢!!

2 个答案:

答案 0 :(得分:2)

据我了解,您与其各自的外键有3个独立的一对一关系,因此您可以将它们映射为正常的一对一关系:

@Entity
public class Task implements Serializable
{
...
    @OneToOne @JoinColumn(name = "SourceDatabase")
    Database sourceDB;

    @OneToOne @JoinColumn(name = "TargetDatabase")
    Database targetDB;
}

@Entity
public class Database implements Serializable
{
     ...
     @OneToOne @JoinColumn(name = "TaskId")
    Task task;  
}

答案 1 :(得分:0)

我正在使用mapledBy搜索-寻找两个外键(一对一)映射到Hibernate中的同一主键列?(用于双向关系)

场景进行了细微修改-如下所示

S

我已经从@axtavt中获取了代码,并为mapedBy进行了修改,因此对其他人会有所帮助

MyCalculate