2013-07-20 94 views
-1

one to many/many to one雙向關係,以避免交叉表的創建我要麼添加@mappedBy@ManyToMany或予添加@JoinColumn註釋。休眠 - 避免交叉表的創建在一對多關係

那麼哪一個最好?

P.S:我知道@mappedBy用於告訴Hibernate其他表(many to one)負責更新關係。

+0

@mappedTo不存在。我不明白如何在沒有連接表的情況下實現ManyToMany。你的問題是標題中的問題嗎?問題文本與標題之間的關係是什麼? –

+0

oups我會糾正它。我的意思是'@ mappedBy'以'一對多'/'多對一'的關係。問題在於標題。 – h4k1m

回答

2

你很困惑。首先,mappedBy不是註釋。它是@OneToOne,@OneToMany@ManyToMany註釋的屬性。

其目的總是相同的:當關聯是雙向關聯時,反面必須具有該屬性。而且必須有一個反面。而在OneToMany關聯的情況下,反面必須是單面。

@JoinColumnmappedBy沒有多大關係。它在關聯的所有者方(或關聯是單向的唯一方)使用,以告知Hibernate,關聯在給定的連接列(或外鍵,如果您願意的話)中實現。如果您不指定JoinColumn,Hibernate將使用默認映射。

你的問題仍然不是很清楚,所以我假定你想避免OneToMany單向關聯中的默認映射,它包括使用連接表。由於它是單向關聯,因此mappedBy無關緊要。但是,你可以簡單地使用JoinColumn告訴Hibernate,它必須使用一個連接列,而不是連接表:

public class Car 
    @OneToMany 
    @JoinColumn(name = "car_id") 
    private Set<Wheel> wheels; 
} 

注意,這是記錄在案,用一個例子,在JoinColumn javadoc,並在Hibernate documentation

+0

你對'mappedBy'的解釋非常清楚。它必須用於雙向關聯。在我不想使用「連接表」的單向關聯中,我必須使用'@ JoinColumn'來避免默認的'@ JoinTable'。 – h4k1m

+0

你明白了@ h4k1m。 –