我知道列表中有几个类似的问题,但我没有成功地将它们扭曲成针对我的特定问题的解决方案。
我正在为我的 hibernate3 配置使用 XML 映射文件。我需要在基础对象和多个附件对象之间创建一组单向关系。(附件可以连接到基础对象上的多个站点,并且每个附件点可以包含许多附件。我需要单独跟踪附件列表。)但是,这样做我得到一个“实体映射中的重复列”异常。
org.hibernate.MappingException: Repeated column in mapping for entity: ATTACHMENT column: attachmentID (should be mapped with insert="false" update="false")
令我困惑的部分是基础对象映射仅使用“attachmentID”作为列表索引,而不是选择键。
谁能告诉我如何设置这些映射文件以避免异常?我在这个论坛上找到的其他类似问题都使用注释,但我需要使用 XML。
这是我的附件对象。它标识了 3 种不同类型的连接点。一种基础对象类型有两个可能的附着点,而另一种只有一个。当它附加到其中一个基点时,它会在适当的对象 ID 中获取该基础对象的 ID,其余的设置为 -1(这是一个特殊的基本记录)。
(当然,这些映射从根本上减少了,但我想我捕获了所有的导入功能。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="attachment" table="ATTACHMENT">
<id column="attachmentID" name="attachmentID" type="int">
<generator class="identity"></generator>
</id>
<property name="idBase1"></property>
<property name="idBase2"></property>
<property name="idAltBase1"></property>
</class>
</hibernate-mapping>
这是基础对象的映射文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="base" table="BASE">
<id column="IDBASE" name="idBase" type="int">
<generator class="identity"></generator>
</id>
<property name="type"></property>
<list name="attachment1" cascade="all">
<key column="idBase1" not-null="true" />
<list-index column="attachmentID" base="0" />
<one-to-many class="ATTACHMENT"/>
</list>
<list name="attachment2" cascade="all">
<key column="idBase2" not-null="true"/>
<list-index column="attachmentID" base="0" />
<one-to-many class="ATTACHMENT"/>
</list>
</class>
</hibernate-mapping>
这是备用基础对象的映射文件。它看起来与主要基础对象相同,但只有一个附件列表。而且,我认为这个还可以。或者,至少,此映射不会引发异常。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="altBase" table="BASE">
<id column="IDBASE" name="idBase" type="int">
<generator class="identity"></generator>
</id>
<property name="type"></property>
<list name="idAltBase1" cascade="all">
<key column="idBase1" not-null="true" />
<list-index column="attachmentID" base="0" />
<one-to-many class="ATTACHMENT"/>
</list>
</class>
</hibernate-mapping>