如何将两个外键映射到Hibernate中的同一主键列(一对一)? [英] How to map two foreign keys mapping to the same primary key column in Hibernate (one-to-one)?

查看:278
本文介绍了如何将两个外键映射到Hibernate中的同一主键列(一对一)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am new to Java and Hibernate and I am trying to map the following scenario in Hibernate (using annotations).

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

I am dealing with the following two tables ( related to some ETL type of tasks).

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

Tasks
    |-TaskId
    |-SourceDatabase (FK to the Databases table)
    |-TargetDatabase (FK to the Databases table)

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

Databases
    |-DatabaseId (PK)
    |-TaskId (FK to the Tasks table)
    |-Other database details.

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

Each task has a sourceDatabase and a targetDatabase. Also each Database is related to only one Task. How can I map to this model in Hibernate using one-to-one mapping.

@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;  
}

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

I have removed all unnecessary code from the above code sample. Thanks in advance!!

推荐答案

据我了解,您与各自的外键具有3个单独的一对一关系,因此您可以将它们映射为普通的一对一关系.一种关系:

As far as I understand, you have 3 separate one-to-one relationships with their respective foreign keys, so you can map them as normal one-to-one relationships:

@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;  
}

这篇关于如何将两个外键映射到Hibernate中的同一主键列(一对一)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆