我使用hibernate的session.load函數時遇到了問題。我嘗試根據ID獲取對象,並返回一個好對象,但只在實例中設置基本屬性。我有一個屬性是一個集合(映射到其他對象),但它沒有被設置後檢索,並且該集合的字段爲空。Hibernate session.load不會填充對象的數組列表屬性
有沒有人有線索爲什麼提取不能按預期工作?
謝謝
我使用hibernate的session.load函數時遇到了問題。我嘗試根據ID獲取對象,並返回一個好對象,但只在實例中設置基本屬性。我有一個屬性是一個集合(映射到其他對象),但它沒有被設置後檢索,並且該集合的字段爲空。Hibernate session.load不會填充對象的數組列表屬性
有沒有人有線索爲什麼提取不能按預期工作?
謝謝
檢查ORM上的抓取策略。一些屬性可以設置爲懶惰而不是渴望。您可能需要在加載後使用Hibernate.Initialize來填充所有屬性。否則,您將不得不修改您的ORM以使用急切加載。使用annotaions,您將設置以下屬性後@Entity屬性關閉默認懶:
@ org.hibernate.annotations.Proxy(懶惰=假)
然而,這將導致一切加載取回時。
我猜這個Set是懶加載的,如果你想讓它被填充,你可以簡單地調用該Set的getter並且它會被加載。 如果你希望它被裝載所有你可以添加
fetch = FetchType.EAGER
例子時間:
@OneToMany(mappedBy = "program", fetch=FetchType.EAGER)
private final List<Instruction> instructions = new ArrayList<Instruction>();
到你的實體的映射
除非你是100%肯定的,你總是希望要裝載的兒童,設置EAGER
可能導致不希望的效果。默認情況下,JBoss工具集提取到LAZY
。
相反,你需要初始化子關聯,其可以以各種方式來完成:
Hibernate.initialize(myObject.getChildren())
size
上的關聯:myObject.getChildren().size()
Criteria
查詢,設置FetchMode
上關聯到JOIN
:criteria.setFetchMode("children", FetchMode.JOIN);
是喲你使用註釋或XML來定義你的ORM? – 2012-03-16 15:15:20
那麼這個問題解決了還是仍然是一個問題? – bvanvelsen 2012-03-26 12:18:35