2014-01-24 56 views
4

Hibernate的Docs(2.2.5.1一比一。)提出了下面的例子:休眠的mappedBy例

@Entity 
public class Customer implements Serializable { 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name="passport_fk") 
    public Passport getPassport() { 
     ... 
    } 

@Entity 
public class Passport implements Serializable { 
    @OneToOne(mappedBy = "passport") 
    public Customer getOwner() { 
    ... 
} 

據我所知,Customer具有Passport,其中Customer一對一的關係是所有者,即負責級聯更新至PassportPassport中的mappedBy表示它與Customer有一對一的關係,但它不負責級聯更新到Customer

CustomerPassportCustomerPassport一個外鍵約束,以及反之亦然。

@JoinColumn(name="passport_fk")Customer是什麼意思? passportPassportmappedBy中怎麼樣?他們是代表各自外鍵的表列嗎?

回答

7
What is the meaning of the @JoinColumn(name="passport_fk") of Customer? 

這意味着passport_fk場將客戶表內創建的,因爲它屬於這裏,此表被視爲關係的所有者(你似乎得到,雖然)。

How about passport in the mappedBy of Passport 

由於這是標註有的mappedBy它表明,該NOT對所有者和該所有者客戶(被註釋的字段)。 名稱屬性告訴Hibernate在哪裏可以找到有關FK映射的信息(Customer內部有一個getPassport方法)。 Passport中不會創建其他字段。

+0

所以'@OneToOne(mappedBy =「passport」)'意味着有一個1對1的關聯,並且'客戶'的'護照'字段映射它(護照)?另外,是否有可能在沒有現有客戶的情況下創建護照?換句話說,Passport對客戶有沒有fk? –

+0

@KevinMeredith是的OneToOne意味着1比1,顯而易見。沒有父母不能創造一個孩子。考慮一下數據庫級別,因爲你沒有在數據庫中已經有PK,你不能插入一個孩子。 – Eugene

+0

根據這個答案(http://stackoverflow.com/a/9108618/409976),那麼我的理解是'護照'不會有'客戶'的外鍵約束。 –