子选择在休眠标准中

sum*_*mit 12 java postgresql hibernate criteria hibernate-criteria

我有一个带有列名的sql表A.

name, id1, id2, val1
Run Code Online (Sandbox Code Playgroud)

和一个带有列名的表B.

id1, id2, key1, key2
Run Code Online (Sandbox Code Playgroud)

这是我的SQL查询

SELECT
  v1.id1,
  v1.id2
FROM (
       SELECT
         A.id1,
         A.id2,
         min(val1) AS x
       FROM A
         JOIN B ON A.id1 = B.id1 AND A.id2 = B.id2
       GROUP BY A.id1, A.id2
     ) AS v1
WHERE v1.x > 10
Run Code Online (Sandbox Code Playgroud)

使用DetachedCriteria我能够形成子查询

DetachedCriteria subCriteria = DetachedCriteria.forClass(A_model.class);
subCriteria.createAlias("b", "b_model");
subCriteria.setProjection(Projections.projectionList()
                            .add(Projections.groupProperty("id1"))
.add(Projections.groupProperty("id2"))
.add(Projections.min("val1"),"x");
Run Code Online (Sandbox Code Playgroud)

但我在创建外部查询时遇到了困难.

任何建议我如何创建上述SQL的标准?

谢谢你的期待.

Avi*_*ash 1

HQL 和 Criteria 对象均不支持从 Select 中选择。这里的解决方案是命名查询。

@NamedNativeQueries({
    @NamedNativeQuery(
    name = "findV1",
    query = "SELECT
              v1.id1,
              v1.id2
            FROM (
                   SELECT
                     A.id1,
                     A.id2,
                     min(val1) AS x
                   FROM A
                     JOIN B ON A.id1 = B.id1 AND A.id2 = B.id2
                   GROUP BY A.id1, A.id2
                 ) AS v1
            WHERE v1.x > 10"
    )
}) 
Run Code Online (Sandbox Code Playgroud)