如何使用Hibernate为有序List创建映射文件?

时间:2010-11-21 14:28:41

标签: java hibernate

我有一个简单的Java模型,其中ListHolder拥有一个List,而List又可以容纳ListHolder对象:

public class ListHolder {
    private List<ListHolder> list;
}

我对Hibernate映射文件的方法如下所示:

<class name="ListHolder" table="tListHolder">
    <id column="id" type="int">
        <generator class="native"/>
    </id>
    <list name="list" access="field" cascade="all">
        <key column="parent" not-null="true"/>
        <index column="elementIndex"/>
        <one-to-many class="ListHolder" />
    </list>
</class>

当我在Hibernate 3.0上使用上面的内容时,我得到以下异常:

Exception in thread "main" org.hibernate.HibernateException: 
Unable to instantiate default tuplizer 
[org.hibernate.tuple.entity.PojoEntityTuplizer]
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(
  EntityTuplizerFactory.java:110)

我在映射文件中做错了吗?有没有更好的方法来映射有效的列表?

使用更新的(3.6)Hibernate版本尝试上述是否有意义?

2 个答案:

答案 0 :(得分:1)

我认为3.6不会改变结果 您的CP中有 javassist.jar 吗?有时它会有所帮助。

答案 1 :(得分:1)

升级到3.6并没有改变任何变化。将javassist添加到CLASSPATH会带来更多有用的错误消息。事实证明,没有setter的另一个成员是堆栈跟踪的罪魁祸首,List的关系实际上是多对多的。以下映射现在可以正常运行:

<class name="ListHolder" table="tListHolder">
    <id name="id" column="fid" type="long" />
    <property name="name" column="fname" type="string" length="100" />
    <list name="list" access="field" cascade="all">
         <key column="parentId" />
         <index column="elementIndex"/>
         <many-to-many class="ListHolder"/>
    </list>
</class>