2012-03-16 76 views
3

我使用hibernate的session.load函數時遇到了問題。我嘗試根據ID獲取對象,並返回一個好對象,但只在實例中設置基本屬性。我有一個屬性是一個集合(映射到其他對象),但它沒有被設置後檢​​索,並且該集合的字段爲空。Hibernate session.load不會填充對象的數組列表屬性

有沒有人有線索爲什麼提取不能按預期工作?

謝謝

+0

是喲你使用註釋或XML來定義你的ORM? – 2012-03-16 15:15:20

+0

那麼這個問題解決了還是仍然是一個問題? – bvanvelsen 2012-03-26 12:18:35

回答

0

檢查ORM上的抓取策略。一些屬性可以設置爲懶惰而不是渴望。您可能需要在加載後使用Hibernate.Initialize來填充所有屬性。否則,您將不得不修改您的ORM以使用急切加載。使用annotaions,您將設置以下屬性後@Entity屬性關閉默認懶:

@ org.hibernate.annotations.Proxy(懶惰=假)

然而,這將導致一切加載取回時。

0

我猜這個Set是懶加載的,如果你想讓它被填充,你可以簡單地調用該Set的getter並且它會被加載。 如果你希望它被裝載所有你可以添加

fetch = FetchType.EAGER 

例子時間:

@OneToMany(mappedBy = "program", fetch=FetchType.EAGER) 
private final List<Instruction> instructions = new ArrayList<Instruction>(); 

到你的實體的映射

0

除非你是100%肯定的,你總是希望要裝載的兒童,設置EAGER可能導致不希望的效果。默認情況下,JBoss工具集提取到LAZY

相反,你需要初始化子關聯,其可以以各種方式來完成:

  1. Hibernate.initialize(myObject.getChildren())
  2. 調用size上的關聯:myObject.getChildren().size()
  3. Criteria查詢,設置FetchMode上關聯到JOINcriteria.setFetchMode("children", FetchMode.JOIN);