2011-04-22 141 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