2011-08-23 52 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中有它自己的表。

问候, 斯特凡

相关问题