2011-02-11 48 views
0

我有以下功能建立一個Hibernate標準來生成分級數據:連接表

private Criteria getCustomBinResultCriteriaSQL(double binSizeX, double binSizeY, String xVar, String yVar, String customBinQuery) { 
    return createCriteria(Residue.class) 
      .setProjection(Projections.projectionList() 
        .add(Projections.sqlGroupProjection(
          "floor(" + xVar + "/" + binSizeX + ") * " + binSizeX + " as xBin, " + 
            "floor(" + yVar + "/" + binSizeY + ") * " + binSizeY + " as yBin, " + 
            "CAST (" + customBinQuery + " AS DOUBLE PRECISION) as customBinResult", 
          "xBin, yBin", 
          new String[] { "xBin", "yBin", "customBinResult" }, 
          new Type[] { Hibernate.DOUBLE, Hibernate.DOUBLE, Hibernate.DOUBLE }))) 
      .setResultTransformer(Transformers.aliasToBean(CustomBinResult.class)); 
} 

這一切都工作得很好了同一個表(渣)中的數據,但是我們要說我數據結構是這樣的:

 
pdbentry: 
id 
pdbvar 

expmethod: 
id 
expvar 

residue: 
id 
resvar 

pdbentry具有expmethod一對一的關係,並與殘基的一個一對多關係。

我怎麼會去參加與expmethod的殘基表,根據上述標準建設者。所以,換句話說:我需要什麼添加到標準能有「expvar」作爲XVAR?

我嘗試添加類似:

.setFetchMode("pdbentry", FetchMode.JOIN); 
.setFetchMode("expmethod", FetchMode.JOIN); 

末,但後來我還是不能把「expvar」,也不是「expmethod.expvar」作爲XVAR。

任何想法?

+0

在這裏閱讀http://stackoverflow.com/questions/30215528/java-hibernate-projections-sqlgroupprojection-aliasing和這裏http://stackoverflow.com/questions/2345419/is-it-possible-to-get-在-SQL別名的-A-加入表-FOR-A-休眠,sqlrestricti – digz6666 2016-10-31 16:16:06

回答

0

您是否嘗試過 「pdbentry.expmethod.expvar」?

對此,我不清楚你想做什麼,但是你定義實體關係的方式,從給定的殘基訪問相關的expvar的方式是「residue.pdbentry.expmethod .expvar」。

1

我走樣加入到表並通過

.createCriteria("rootEntity.foreignEntity", "someAlias") 

這使得rootEntity.foreignEntity.someProperty可用條件查詢爲someAlias.someProperty(通常我選擇「someAlias」是一樣的「foreignEntity」)。

由於我通常需要一個渴望獲取,我傾向於在createCriteria調用上也有Criteria.INNER_JOINCriteria.LEFT_JOIN