【问题标题】:How to map one entity class with four table in hibernate which have same sql schema?如何在hibernate中将一个实体类映射到具有相同sql模式的四个表?
【发布时间】:2016-12-08 17:34:22
【问题描述】:

我有四个具有相同 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 个实体类

有什么方法可以让我只定义一个实体类和映射 所有四个表到该实体,以便我可以从任何一个获取数据 我想要的表

【问题讨论】:

    标签: mysql hibernate hibernate-mapping


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      为什么不创建一个表并为其添加属性 usernumber,在与您的实体建立关联时创建四个引用,每个引用都有不同的 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;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-21
        • 2017-03-13
        • 1970-01-01
        • 2011-07-18
        相关资源
        最近更新 更多