2011-07-13 50 views
3

在hibernate Criteria規範中,如果我想在表中分組屬性,我必須使用Projections.groupProperty。問題是我無法選擇表中的所有字段。休眠選擇所有預測組

我想做什麼是:

SELECT * FROM實體GROUP BY場

如果我在休眠條件中使用組,那麼groupProperty必須是存在的,而SQL結果將是: SELECT場FROM實體GROUP BY字段。

有什麼辦法得到我想要的?我在CriteriaJoinWalker的hibernate代碼中看到,當我想選擇全部(select *)時,代碼已經指定是否有投影。我的假設,如果我想改變行爲,我必須改變CriteriaJoinWalker代碼。我可以修改代碼,也許我可以得到我想要的結果,但如果可以的話,我不希望覆蓋我的項目的hibernate核心代碼。有沒有辦法直接改變它,而不用改變休眠代碼?

// CriteriaJoinWalker 
    if(translator.hasProjection()) 
    { 
     resultTypes = translator.getProjectedTypes(); 
     initProjection(translator.getSelect(), translator.getWhereCondition(), translator.getOrderBy(), translator.getGroupBy(), LockMode.NONE); 
    } else 
    { 
     resultTypes = (new Type[] { 
      TypeFactory.manyToOne(persister.getEntityName()) 
     }); 
     initAll(translator.getWhereCondition(), translator.getOrderBy(), LockMode.NONE); 
    } 

感謝

回答

1

如果你使用的預測,那麼你將無法得到一個實體對象作爲一個整體。不幸的是,冬眠不能幫助你。看看這個Issue,也看看這個thread

+0

是的,我知道......正如我之前所說的。似乎沒有辦法從Projections中獲取實體。 – Jef