У меня есть следующая функция, которая строит критерии гибернации для генерации двоичных данных:
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.
Есть идеи?