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)
和结果,我应该user1在users_1_table和user2 中users_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中的同一个实体
[4] http://docs.jboss.org/hibernate/core/3.2/reference/en/html/mapping.html#mapping-entityname
[5] Hibernate 4:一个类映射两个表 - 如何在两个表上保留一个对象?
| 归档时间: |
|
| 查看次数: |
30677 次 |
| 最近记录: |