2011-04-22 98 views
0

我是Java和Hibernate的新手,我试图在Hibernate中映射下面的场景(使用注释)。如何将两个外键映射映射到Hibernate中的同一主键列(一对一)?

我正在处理以下两个表(涉及一些ETL类型的任务)。

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

数据库
        | -DatabaseId(PK)
        | -TaskId(FK的任务表)
        | - 其他数据库详细信息。

每个任务都有一个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

据我了解,你有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; 
} 
+0

谢谢Axtavt!我对@mappedby注解感到困惑。不确定何时需要@mappedby? – ajay 2011-04-23 11:49:34

+0

@crazyfor:'mappedBy'用于链接相同双向关系的两侧。由于你的关系使用他们自己的外键,你有单独的单向关系,并且不需要'mappedBy'。 – axtavt 2011-04-25 08:42:46