Hibernate ManyToOne Bidirectional JoinTable 的一個大坑

背景

由於對象設計的關係,我愚蠢地用了多級繼承。在持久化的時候,還用了 PerClass Join 的方式。這下子惹了麻煩。最底層的表要往上 Join 很多次才能形成完整的數據,如果同處於較底層的兩個表 Join,就費死勁了,有一次還突破了 MySQL 61 層 Join 的限制。非常槽糕。

問題

由於我不想通過 ManyToOne - JoinColumn / OneToMany - MappedBy 方式進行映射。因爲這樣做, Hibernate 似乎會把兩個表直接 Join 在一起。這樣會讓 Join的層數比較大。 – 也不知道這樣的理解對不對。反正我是這樣 Join 之後出了一次問題,換成 JoinTable 就好了。

於是我就會 ManyToOne JoinTable。但是我的問題是在 Many端和 One端都使用了 JoinTable。因爲我需要 Bidirectional 結果出現一個奇怪的現象。保存在數據庫中,看上去沒有任何問題。但是在 Many端讀取時,相應的 One 元素總是 Null。

比如,我有一個 VmContainer,有多個 Vm。結果讀取到一個 Vm 後,裏面的 VmContainer 屬性總是 Null。從數據庫看沒毛病。

後來查了萬能的 SO,才發現,ManyToOne Bidirectional JoinTable 不是那麼寫的。應該是在 Many 端定義 JoinTable,而在 One 端使用 MappedBy 就可以了。

困擾了我兩天的問題終於解決了。
https://stackoverflow.com/questions/11379017/many-to-one-with-join-table-in-hibernate-resource-classes-for-a-jax-rs-using-jer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章