我有以下函数来构建一个Hibernate Criteria来生成分箱数据:
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 :(得分:1)
我通过
对连接表进行别名处理.createCriteria("rootEntity.foreignEntity", "someAlias")
这使得rootEntity.foreignEntity.someProperty
可用作条件查询someAlias.someProperty
(通常我选择“someAlias”与“foreignEntity”相同)。
由于我通常需要热切提取,因此我也会在createCriteria调用中使用Criteria.INNER_JOIN
或Criteria.LEFT_JOIN
。
答案 1 :(得分:0)
您是否尝试过“pdbentry.expmethod.expvar”?
我不清楚(对我而言)你想要做什么,但是你定义实体关系的方式,从给定的残差访问相关的expvar的方法是“residue.pdbentry.expmethod。 expvar”。