[英]Hibernate - mapping a class more than once
我正在尝试添加一个持久性新添加的类。 当我开始时,有一个名为Tournament
的类,其成员的类型为Schedule
,该类仅包装Session
对象的列表。 这是该类的休眠映射。 它的ID和其他字段已被省略。
<hibernate-mapping default-access="field">
<class name="fully.qualified.class.Tournament" table="tournaments">
<component name="schedule" class="fully.qualified.class.Schedule">
<list name="sessions" cascade="all-delete-orphan" lazy="true" table="tournament_sessions" >
<key column="tournament_id" not-null="true"/>
<index column="session_index"/>
<one-to-many class="fully.qualified.class.Session"/>
</list>
</component>
</class>
</hibernate-mapping>
现在,我需要创建一个新的类OtherThing
,它也具有一个Schedule.
因此,我复制了会话表并将其命名为other_thing_sessions.
我还创建了一个类似于上面的休眠映射:
<hibernate-mapping default-access="field">
<class name="fully.qualified.class.OtherThing" table="other_things">
<component name="schedule" class="fully.qualified.class.Schedule">
<list name="sessions" cascade="all-delete-orphan" lazy="true" table="other_thing_sessions" >
<key column="other_thing_id" not-null="true"/>
<index column="session_index"/>
<one-to-many class="fully.qualified.class.Session"/>
</list>
</component>
</class>
</hibernate-mapping>
令我惊讶的是,这导致了以下错误:
org.hibernate.MappingException: Repeated column in mapping for entity: fully.qualified.class.Session column: session_index (should be mapped with insert="false" update="false")
休眠似乎不喜欢我重复使用此类,因此我尝试将属性entity-name="OtherThingSession"
到一对多元素。 现在我遇到了这个错误:
org.hibernate.MappingException: Association references unmapped class: OtherThingSession
这让我离开了一分钟,所以我回头看了看我原来的错误。 我决定只更改新映射中索引列的名称。 冬眠并没有引起抱怨,但是坚持不起作用。 好像它试图插入会话对象到tournament_sessions
表时,我试图坚持一个OtherThing.
有人对如何解决此问题有任何想法吗?
您不能两次映射课程。 Hibernate无法处理此问题。 如您所见,您将得到比以前更奇怪的错误。 (同样,当一个类被映射两次时,一级缓存也无法正常工作,因为Hibernate使用该类来决定一个缓存实例属于哪个表。我的效果是在uniqueResult()上获得了两个实例(因此是一个异常)。 )以为表格中只有一个。)
你可以做什么:
创建两个“空”类,它们扩展了Session而不向其添加任何功能,例如
public class TournamentSession extends Session {}
public class OtherSession extends Session {}
然后在一个<one-to-many>
属性中使用TournamentSession
,在另一个属性中使用OtherSession
。 Session
本身绝不能被映射,也不能在Hibernate属性中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.