Hiber配置之list困惑

有三个配置文件
--------------------------------------------
JiveForum.hbm.xml
--------------------------------------------
[该贴被shychair于2007年02月27日 18:01修改过]


<hibernate-mapping>
<class name="com.jive.common.pojo.JiveForum"
table=
"JiveForum"
discriminator-value=
"C">

<id name=
"forumID">
<generator class=
"increment"/>
</id>
<property name=
"name"/>
<property name=
"description" type="text"/>
<property name=
"modDefaultThreadVal"/>
<property name=
"modMinThreadVal"/>
<property name=
"modDefaultMsgVal"/>
<property name=
"modMinMsgVal"/>
<property name=
"modifiedDate"/>
<property name=
"creationDate"/>
<list name=
"threads" table="JiveThread" cascade="" lazy="true">
<key column=
"forumID"/>
<index column=
"threadID"/>
<element type=
"timestamp" column="modifiedDate"/>
</list>
<list name=
"messages" table="JiveMessage" cascade="" lazy="true">
<key column=
"forumID"/>
<index column=
"threadID"/>
<element type=
"timestamp" column="modifiedDate"/>
</list>
</class>
</hibernate-mapping>

[该贴被shychair于2007年02月27日 18:02修改过]

JiveThread.hbm.xml
---------------------------------------



<hibernate-mapping>
<class name="com.jive.common.pojo.JiveThread"
table=
"JiveThread"
discriminator-value=
"C">
<id name=
"threadID">
<generator class=
"increment"/>
</id>
<property name=
"forumID"/>
<property name=
"rootMessageID"/>
<property name=
"modValue"/>
<property name=
"rewardPoints"/>
<property name=
"creationDate"/>
<property name=
"modifiedDate"/>
<list name=
"messages" table="JiveMessage" cascade="" lazy="true">
<key column=
"threadID"/>
<index column=
"userID"/>
<element type=
"timestamp" column="modifiedDate"/>
</list>
</class>
</hibernate-mapping>

JiveMessage.hbm.xml
-----------------------------------------



<hibernate-mapping>
<class name="com.jive.common.pojo.JiveMessage"
table=
"JiveMessage"
discriminator-value=
"C">
<id name=
"messageID">
<generator class=
"increment"/>
</id>
<property name=
"parentMessageID"/>
<property name=
"threadID"/>
<property name=
"forumID"/>
<property name=
"userID"/>
<property name=
"subject"/>
<property name=
"body"/>
<property name=
"modValue"/>
<property name=
"rewardPoints"/>
<property name=
"creationDate"/>
<property name=
"modifiedDate"/>
/class>
</hibernate-mapping>

出现一个错误:
Foreign key (FK2BC087D9B8782A17:JiveMessage [threadID])) must have same number of columns as the referenced primary key (JiveThread [forumID,threadID])
哪位大虾可以解释下么?JiveThread只有一个primary key呀?

另:去掉JiveThread.hbm.xml中的list映射是可以通过的

>key column="threadID"/
应该是messageID吧?

不是的,threadID是JiveMessage引用JiveThread的外键
主要问题是当JiveForum配置


<list name="threads" table="JiveThread" cascade="" lazy="true">
<key column=
"forumID"/>
<index column=
"threadID"/>
<element type=
"timestamp" column="modifiedDate"/>
</list>

时,似乎为JiveThread 添加了主键(联合主键?),导致
Foreign key (FK2BC087D9B8782A17:JiveMessage [threadID])) must have same number of columns as the referenced primary key (JiveThread [forumID,threadID])
Hibernate是否画蛇添足?理解可能有不正确的地方,欢迎各大虾指正

需要重新理清思路,重新整理模型关联,按照对象建立法则,去除不必要的关联,特别是双向关联,找出真正具备约束的高聚合。

个人认为forum这个对象不必再包含thread等关联关系了。