2010-11-21 55 views
3

我有一个简单的Java模型,其中ListHolder拥有列表,反过来可容纳ListHolder对象:如何使用Hibernate为有序列表创建映射文件?

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版本来尝试上述内容有意义吗?

回答

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> 
1

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

相关问题