每个实体休眠两个表

msa*_*gel 16 java sqlite spring hibernate hibernate-annotations

我有一个实体 - User.它由描述User.class.

Hibernate为每个实体创建一个表,所以当我调用时session.save(user),我的数据总是保存到该表中.

现在我需要另一个表来表示相同User类型的数据,我需要将我的实体保存到该表中.

数据结构(类似这样):

table users_1_table{
  string id;
  string username;
}

table users_2_table{
  string id;
  string username;
}
Run Code Online (Sandbox Code Playgroud)

使用这个:

session.save(user1,"users_1_table")
session.save(user2,"users_2_table")
Run Code Online (Sandbox Code Playgroud)

和结果,我应该user1users_1_tableuser2users_2_table.

由于系统限制,我不能将这两个对象放在一个表中.(即使创建额外的字段也是个坏主意).

我可以在没有子类化的情况下这样做吗?使用programmaticaly hibernate配置?

mic*_*ico 33

前言:

即使在SO上,这也是一个被广泛提问的问题,并且答案也广泛地与答案相关Subclass或实际SuperClass接近(例如[ 1 ])

实际答案:

在这些帖子[ 2 ],[ 3 ]中,他们建议使用带EntityName参数的xml映射.

因此,使用xml进行映射不需要supeclass,只需将EntityName参数赋予两个相同的映射.

示例映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
   <class name="DomainModel.User, DomainModel"
     table="User1Object" entity-name="User1Object">  
         <id name="_id" access="field" column="id">
             <generator class="assigned"/>
         </id>
        <property name= ...>
 </class>
 <class name="DomainModel.User, DomainModel"
     table="User2Object" entity-name="User2Object">
         <id name="_id" access="field" column="id">
            <generator class="assigned"/>
         </id>
        <property name= ...>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

然后,根据您需要的实体类型,您可以调用适当的会话方法:

_session.Save("User1Object", user1)

要么

_session.Save("User2Object", user2)

帖子2和3用作此片段的基础.官方消息来源[ 4 ]

比赛结束后:

第一个问题的一个答案实际上链接到这篇文章[ 5 ],有不同的方法:

您说再见对象的第一个实例,将数据克隆到新实例并使用不同的名称保留它.因此,不会违反Hibernate逻辑和每个人的内容:两个表中的相同数据并且没有使用子类.

那么,该方法的实现或代码或可信度是如此,我还没有测试过它.

另一个案例:

在这篇文章中[ 6 ]还有另一种试图挑战与简单的东西超类方法的人,但同样,最可信的答案指出这是不可能的另一种方法周围,官非XML的方法是说,子类的方法.

来源

[1] 如何使用hibernate/jpa注释将一个类映射到不同的表

[2]将两个相同的表(相同的模式......)映射到Hibernate中的同一个实体

[3] 如何将2个相同的表(相同的属性)映射到1个实体

[4] http://docs.jboss.org/hibernate/core/3.2/reference/en/html/mapping.html#mapping-entityname

[5] Hibernate 4:一个类映射两个表 - 如何在两个表上保留一个对象?

[6] 存在于多个目录中的实体的Hibernate注释