2011-08-23 51 views
1

我正在編寫一個程序,根據所選內容顯示書籍的不同翻譯。所以假設我有3個表中有相同列的數據庫,比如英語,法語和德語。然後我有一個POJO,比如Book.java。將具有相同模式的多個表映射到休眠中的相同POJO

現在我該如何使用同一個類來根據用戶選擇來查詢特定的表。我是否動態更改@table(name =「...」)的值?這甚至有可能嗎?我一直在使用jdbc,但這將是我的第一個hibernate項目。

回答

5

您可以將所有的字段和方法存儲在註釋爲@MappedSuperclass的基類中,並且有三個不同的子類,每個子類都有不同的註釋值@Table

但是這對我來說似乎是一個正常化問題。如果您有三個表格完全保存相同的列,爲什麼不使用具有其他language列的單個表?

+0

同意,你應該正常化。如果大小成爲問題,則根據語言對錶格進行分片/分區。爲每種語言設置單獨的表格(或者甚至單獨的列......)會讓你感覺不舒服 - 當表格結構發生變化時會發生什麼? –

+0

謝謝你們,但我不能修改數據庫,我也沒有在尋找層次結構。我最終使用了hbm.xml的entity-name屬性。現在,我只能用一種課程進行各種翻譯。 – Rizwan

1

您應該設計一個類層次結構:Book類是最上面的類,BookFrench,BookGerman,BookEnglish beeing子類。那麼你將不得不使用其中一個hibernate繼承模型(爲此,我認爲MappedSuperClass將是最有趣的)。然後你將有不同的類,但所有的實例將是書Pojos,每個子類將在DB中有它自己的表。

問候, 斯特凡

相關問題