2016-02-07 61 views
0

我想一次抓取所有數據。

這裏是我的代碼:

 Session session = this.sessionFactory.getCurrentSession(); 
     Criteria c=session.createCriteria(UserFullTest.class); 
     c.createAlias("associatedTestContentElementResponses", "tcer"); 
     c.setFetchMode("tcer", FetchMode.JOIN); 

     c.add(Restrictions.idEq(uftId)); 
     Criteria cra=c.createCriteria("tcer.associatedResponseAttributes"); 
     cra.createAlias("tcer.associatedResponseAttributes", "ra"); 
     cra.setFetchMode("ra", FetchMode.JOIN); 
     List<UserFullTest> uftList = c.list(); 

我得到以下異常:

org.hibernate.QueryException:重複協會路徑:associatedTestContentElementResponses.associatedResponseAttributes

任何提示將非常感謝

我應該解釋... 如果我沒有指定subCriteria FetchMode它使用Select模式。所以我試圖通過包含子標準來獲取所有內容。我知道數據拉的確切大小,所以我知道一次獲取是最佳做法

回答

0

您創建標準的方式需要更改如下。

Session session = this.sessionFactory.getCurrentSession(); 
    Criteria c=session.createCriteria(UserFullTest.class).createCriteria("tcer.associatedResponseAttributes"); 
    c.createAlias("associatedTestContentElementResponses", "tcer"); 
    c.setFetchMode("tcer", FetchMode.JOIN); 

    c.add(Restrictions.idEq(uftId)); 

    c.createAlias("tcer.associatedResponseAttributes", "ra"); 
    c.setFetchMode("ra", FetchMode.JOIN); 
    List<UserFullTest> uftList = c.list(); 
+0

這將帶回一個不正確的大小列表。 UserFullTest有15個響應,每個響應都有兩個響應屬性。 – Jake