2011-10-07 197 views
0

我正在使用Hibernate从数据库读取数据。我不是太熟悉,所以也许答案很简单:休眠没有找到持久集

我用下面简单的代码:

public static void main(String[] args) { 
    CourseHelper ch = new CourseHelper(); 
    Course c = ch.readCourse("fkaea"); 
    for (Module m : c.getModules()) { 
     for (Question q : m.getQuestions()) { 
      for (Answer a : q.getAnswers()) { 
      } 
     } 
    } 
} 

阅读课程后,我可以遍历它的模块,但持续的一系列问题可以不会被访问。 (size ='0')虽然有问题。

的休眠配置文件如下:

第一模块映射:

<hibernate-mapping> 
    <class name="hibernate.dao.Module" table="module" catalog="questionnair"> 
     <composite-id name="id" class="hibernate.dao.ModuleId"> 
      <key-property name="idmodule" type="int"> 
       <column name="idmodule" /> 
      </key-property> 
      <key-property name="idcourse" type="string"> 
       <column name="idcourse" length="12" /> 
      </key-property> 
     </composite-id> 
     <many-to-one name="course" class="hibernate.dao.Course" update="false" insert="false" fetch="select"> 
      <column name="idcourse" length="12" not-null="true" /> 
     </many-to-one> 
     <property name="omschrijving" type="string"> 
      <column name="omschrijving" length="45" /> 
     </property> 
     <set name="questions" inverse="true"> 
      <key> 
       <column name="idcourse" /> 
       <column name="idmodule" length="12" /> 
      </key> 
      <one-to-many class="hibernate.dao.Question" /> 
     </set> 
    </class> 
</hibernate-mapping> 

问题映射:

<hibernate-mapping> 
    <class name="hibernate.dao.Question" table="question" catalog="questionnair"> 
     <id name="idvraag" type="java.lang.Integer"> 
      <column name="idvraag" /> 
      <generator class="identity" /> 
     </id> 
     <many-to-one name="module" class="hibernate.dao.Module" fetch="select"> 
      <column name="idcourse" /> 
      <column name="idmodule" length="12" /> 
     </many-to-one> 
     <property name="vraag" type="string"> 
      <column name="vraag" length="245" /> 
     </property> 
     <set name="answers" inverse="true"> 
      <key> 
       <column name="idvraag" not-null="true" /> 
      </key> 
      <one-to-many class="hibernate.dao.Answer" /> 
     </set> 
     <set name="testquestionses" inverse="true"> 
      <key> 
       <column name="idquestion" not-null="true" /> 
      </key> 
      <one-to-many class="hibernate.dao.Testquestions" /> 
     </set> 
    </class> 
</hibernate-mapping> 

我想答案是简单的,但如果任何人都可以帮助我,我很友善。

感谢名单

回答

0

默认休眠不会加载集合时列表或设置是used.If你想,加入为lazy =“假”关闭懒惰的标志。然后,无论何时加载模块,所有的问题都会被加载。

<set name="questions" inverse="true" lazy="false"> 
     <key> 
      <column name="idcourse" /> 
      <column name="idmodule" length="12" /> 
     </key> 
     <one-to-many class="hibernate.dao.Question" /> 
    </set> 

如果你不想改变你的映射,并希望在这种特定情况下加载的集合,你可以使用同样,Hibernate.initialize(module.getQuestions());关闭会话之前。

了解更多关于休眠集合映射的信息here。或者看一个例子here