我有一个简单的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版本尝试上述是否有意义?
答案 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>