2011-11-03 115 views
0

我有2個實體:Person和Phone(一對多關係)。我想使用JoinTable:休眠狀態下由另一個實體更改連接表

class Person 

    @OneToMany() 
    @JoinTable(name="PERSON_PHONES", 
      joinColumns={ @JoinColumn(name="PERSON_ID") }, 
      inverseJoinColumns={ @JoinColumn(name="PHONE_ID") }) 
public List<Phone> getPhones(){...} 

但是,由於某種原因,我不能使用JoinTable,所以我需要寫類PersonPhone。我懷疑關係,可能是這樣嗎?

人 - > PersonPhone:一個一對多的雙向 PersonPhone - >電話:一到一個單向

而另一個問題,如果我定義這個級聯規則:

class Person { 

@OneToMany(cascade=CascadeType.ALL,mappedBy="person") 
public List<PersonPhone> getPersonPhones() {...} 
... 
} 

class PersonPhone { 

@OneToOne(cascade=CascadeType.ALL) 
public Phone getPhone(){...} 
... 
} 

// class phone has not fields for this relation 

會刪除人員時刪除手機嗎?

回答

2

目前尚不清楚爲什麼你不能使用連接表,但如果你保留這個設計,那麼是的,這要感謝你在兩個關聯上定義的cascade=CascadeType.ALL,刪除一個人將刪除它的PersonPhone,然後級聯到Phone

PersonPhone實體只有在人物和電話屬性不止時纔有用。

+0

PersonPhone沒有其他屬性,但有JuredicalPerson實體,它有自己的電話連接表,這就是爲什麼我想使用PersonPhone。而且我無法使用JoinTable,因爲程序架構的限制可能會耗費時間來重寫。但我也不想創建不好的數據庫設計,因爲這個約束...注意最好的解決方案:) –

+0

我不明白爲什麼另一個連接表存在的事實阻止您使用連接表進行此關聯。 –

+0

我在這裏得到這個主意:http://stackoverflow.com/questions/7991830/what-table-structure-to-use-hibernate –