如何在hibernate中将一个实体类映射到具有相同sql模式的四个表?

时间:2016-08-03 06:36:54

标签: mysql hibernate hibernate-mapping

  

我有四个具有相同sql架构的表

user_1
+------+--------+----------------------+
| code | name   | pass                 |
+------+--------+----------------------+
|    1 | rajiv  | 12345                |
+------+--------+----------------------+

user_2
+------+--------+----------------------+
| code | name   | pass                 |
+------+--------+----------------------+
|    1 | rajiv1  | 12345               |
+------+--------+----------------------+

user_3
+------+--------+----------------------+
| code | name   | pass                 |
+------+--------+----------------------+
|    1 | raji2  | 12345                |
+------+--------+----------------------+


user_4
+------+--------+----------------------+
| code | name   | pass                 |
+------+--------+----------------------+
|    1 | raji3  | 12345                |
+------+--------+----------------------+
  

我不想为这些表制作4个实体类

     

有没有办法让我只能定义一个实体类和地图   所有四个表到该实体,以便我可以从任何一个获取数据   表我想

2 个答案:

答案 0 :(得分:0)

如果您的数据库支持视图,我建议您创建一个包含所有四个表的数据的视图,并将此视图映射到一个实体。这可能比尝试将4个表映射到一个实体更简单,更清晰。

答案 1 :(得分:0)

为什么不创建一个表并向其添加属性usernumber,在构建与实体的关联时创建四个引用,每个引用都有不同的用户编号,并且都映射到同一个表。

另一种方法,如果您的实体与每个用户表有关联,创建一个类用户并使用注释“@Embeddable”使其可嵌入,在您的实体中覆盖列的名称

         @AttributeOverrides({
         @AttributeOverride(name =  "code",column=@Column(name="user1_code"))})
         private User user1;

         @AttributeOverrides({
         @AttributeOverride(name =  "code",column=@Column(name="user2_code"))})
         private User user2;

请注意,这不会映射到另一个表,而是将每个用户的列合并到您的实体