将Group by添加到Hibernate Criteria-Query,无需Projection

Kai*_*itz 5 java hibernate group-by criteria

我有一个Criteria-Query,它连接第二个表B,从表A中选择实体.问题是,这个查询多次从表A返回一些实体.但我需要结果是截然不同的.

使用Criteria.DISTINCT_ROOT_ENTITY是没用的,因为这会在执行SQL-Query后过滤掉多次出现.因此,当我将结果限制为20次点击时,我最终只有4次,尽管有更多条目符合我的查询.

在纯SQL中我只是可以向查询添加"GROUP BY ID",一切都很好,因为只使用表B的连接,从表A中选择实体.但是使用Criteria-API我不能这样做.添加"GROUP BY"的唯一方法是使用Projections.但是,我最后得到的是标量值,而不是我班级的真实实例.使用SQL限制也不起作用,因为hibernate在我的"GROUP BY"-clause之后添加了一个含糊的"1 = 1".:(

有任何想法吗?

ala*_*irg 0

可以编写 Hibernate 可用来返回实体的实际 SQL 查询。因此,如果您确实需要,您可以绕过 HQL,并使用 GROUP BY 准确编写您想要的查询。

详细信息请参见此处

例如,您可以在 hbm.xml 文件中定义如下查询:

<sql-query name="exampleQuery">
<query-param name="param" type="int"/>
<return alias="x" class="foo.bar.X"/>
<return alias="y" class="foo.bar.Y"/>
    <![CDATA[
        select {x.*}, {y.*}
        from XEntity x
        inner join YEntity y on y.xId = x.id
        where y.value = :param
    ]]>
</sql-query>
Run Code Online (Sandbox Code Playgroud)

请注意 {x. } 和 {y. 用于选择实体 X 和实体 Y 的所有属性的简写语法