好的,所以今天我嘗試了一個基本的Hibernate教程,並且努力使其表現得如何。沒有第三張表的一對多關聯
這是一個簡單片斷,假設所有其它字段/方法被定義(例如ID等)
@Entity
@Table(name = "CITIES")
public static class City {
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private Country country;
}
@Entity
@Table(name = "COUNTRIES")
public static class Country {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<City> cities;
}
將上述溶液利用了(自動創建的)關聯表 - COUNTRY_CITIES
,但 這樣做工作只有一種方式 - 即我看到國家的城市(當我選擇一個城市時),但我沒有看到一個城市的國家(當我選擇一個城市時)。
那麼,我應該怎麼做才能讓城市看到他們的國家?
我可以將添加到Country.cities
字段,它有兩種工作方式。
但我不喜歡從國家的代碼添加列到城市的表。
因此,我將@JoinColumn
添加到City.country
字段,它不起作用。
所以 - 如何使關聯工作在沒有關聯表的兩種方式?
行,更確切地說:我使用上述代碼添加與該對象喂DB:
Country germany = new Country("Germany", new HashSet<>(asList(
new City("Berlin"),
new City("Hamburg")
)));
..和觀看的DB。它是這樣的:
表COUNTRIES_CITIES(注意,我並沒有把它聲明;休眠自動執行)
COUNTRIES_ID CITIES_ID
1 1
1 2
表COUNTRIES
ID NAME
1 Germany
表城市(注意我沒有申報COUNTRY_ID列!再次休眠..)
ID NAME COUNTRY_ID
1 Berlin null
2 Hamburg null
就是這樣。提取國家給我的城市,提取城市給我空的國家。
如果我添加一個@JoinColumn
到Country
類,則列追加到CITIES
表和工程取兩種方式。
嘿,您提供的類定義沒有意義。國家和城市的內部班級是外部班級嗎?您的類聲明具有靜態標識符,這在外部類聲明中是非法的。 – SpartanElite
@SpartanElite是的,他們都嵌套在一個'公共類Example1 {..}'只是爲了保持在一個地方 – Parobay
我甚至不會看你的問題的內容,答案或評論。爲什麼沒有第三張桌子的一對多關係會成爲問題?很多很多,當然;一對多 - 那麼你或者其他人(框架作者?)做錯了 –