我有以下的Hibernate映射:休眠 - 負載孩子
<class name="Database.Content" table="..." schema="" catalog="...">
<id name="id">
<column name="id" sql-type="int" not-null="true"/>
</id>
<property name="week">
<column name="week" sql-type="int"/>
</property>
<property name="day">
<column name="day" sql-type="int"/>
</property>
<property name="hour">
<column name="hour" sql-type="int"/>
</property>
<property name="type">
<column name="type" sql-type="int" not-null="true"/>
</property>
<many-to-one name="group" class="Database.Group">
<column name="group"/>
</many-to-one>
<many-to-one name="table" class="Database.Table">
<column name="table" not-null="true"/>
</many-to-one>
<list name="entries" inverse="true" table="...">
<key>
<column name="content" not-null="true"/>
</key>
<list-index column="id"/>
<one-to-many not-found="ignore" class="Database.Entry"/>
</list>
</class>
<class name="Database.Entry" table="..." schema="" catalog="...">
<id name="id">
<column name="id" sql-type="int" not-null="true"/>
</id>
<property name="teacher">
<column name="teacher" sql-type="int" not-null="true"/>
</property>
<property name="course">
<column name="course" sql-type="int" not-null="true"/>
</property>
<property name="room">
<column name="room" sql-type="int" not-null="true"/>
</property>
<property name="p">
<column name="p" sql-type="int" not-null="true"/>
</property>
<many-to-one name="content" class="Database.Content" fetch="join" lazy="false">
<column name="content" not-null="true"/>
</many-to-one>
</class>
現在我想查詢所有contents
與相應entries
:
List<Content> contents = session.createQuery("from Content c WHERE c.day IN :days ").setParameterList("days", days).list();
查詢返回正確的響應。但是,當我執行以下操作時:
contents.get(0).getEntries()
存在一堆空值。什麼是正確加載所有對應的entries
每個content
的正確方法?
我有大約20,000個content
記錄,並且大多數記錄只有一個條目。
如果我設置lazy="false"
爲entries
的列表,我得到Java heap space
錯誤。
我最終獲取entries
和加入contents
:
List<Entry> entries = session.createQuery("select e from Entry e Join e.content c WHERE c.day IN :days ").setParameterList("days", days).list();
我也改變lazy
到proxy
:
<many-to-one name="content" class="Database.Content" fetch="join" lazy="proxy">
<column name="content" not-null="true"/>
</many-to-one>
謝謝。我有大約2萬個「內容」記錄,大多數記錄通常只有一個條目。但現在需要永久加載它們,所以我現在無法分辨它是否可行。 – nickbusted 2015-03-31 08:02:37
我得到以下錯誤java.lang.OutOfMemoryError:Java堆空間 – nickbusted 2015-03-31 08:05:31
我相信20.000元素太多了。您必須刪除lazy = false並調用Hibernate上下文中的contents.get(0).getEntries() – vathek 2015-03-31 08:09:06