2010-11-21 98 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嗎?有時它有幫助。