2012-09-18 241 views
0

現在我正在處理小型項目,提交非常簡單的作業,並且正在將其保存到數據庫中。考慮這種情況下:Hibernate註釋關係

public class Myjob{ 
    int id; 
    int name; 
    MyJobConfiguration configuration; 
    //etc 
} 

public class MyJobConfiguration{ 
    //bunch of configuration fields 
} 

我有單獨的類這些配置你看,這意味着我想添加/更新/刪除我的工作對象的配置獨立。

我的目標是先創建配置,然後在創建作業時爲其分配現有配置。

因此,多個作業可以使用相同的配置對象。

我該怎麼做?我已經知道如何在數據庫中做到這一點,我將配置的主鍵連接到myJob類中的外鍵,但在休眠中看起來不同。有沒有人有例子如何做到這一點?

我發現這是因爲我認爲這是它http://www.mkyong.com/hibernate/hibernate-one-to-one-relationship-example-annotation/但似乎沒有

回答

1

你想要一個一對多的關係,而不是鏈接的文章中描述的一對一。

你已經清楚瞭解你希望這種關係如何工作,這很好。根據你所說的話,我會做MyJobConfiguration是這樣的:

public class MyJobConfiguration { 
    @OneToMany(mappedBy = "configuration") 
    private List<MyJob> jobs; 

    //bunch of configuration fields 
} 

和MyJob是這樣的:

public class Myjob{ 
    int id; 
    int name; 

    @ManyToOne 
    @JoinColumn(name = "configuration_id", nullable = false) 
    MyJobConfiguration configuration; 
    //etc 
} 

我甚至可能會傾向於給MyJob一個構造函數一個MyJobConfiguration實例,並創建MyJob()默認構造函數包 - 專用作用域,以便Hibernate仍然可以使用它,但調用者不能。

+0

感謝您的回覆。創建使用myjob配置實例並使其成爲私有包的myjob構造函數的原因是什麼? – London

+0

您將使'MyJob(MyJobConfiguration config)'構造函數public和默認構造函數'MyJob()'包私有。這樣做的原因是爲了防止人們編碼的實體調用空的構造函數(因爲需要配置)。但是Hibernate需要默認的構造函數來從DB加載對象,並且它仍然可以使用具有更多限制範圍的默認構造函數。 – Jeff