首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JPA CriteriaBuilder进行Union All and Sum

使用JPA CriteriaBuilder进行Union All and Sum
EN

Stack Overflow用户
提问于 2012-02-02 07:29:35
回答 4查看 28.5K关注 0票数 8

我正在尝试将原生SQL查询转换为使用JPA2.0中的Criteria API。我在Google上找到了很多Criteria API的例子,但我真的很难把所有的东西放在一起。我希望一个更有经验的人能帮助我。原生查询如下所示:

代码语言:javascript
运行
复制
select 
    sum(amount) from firstTable, secondTable 
        where firstTable.id = secondTable.id 
            and amount <> 0 
            and firstTable.id = ?
union all
select 
    sum(amount) from firstTable, thirdTable 
        where firstTable.id = thirdTable.id 
            and amount <> 0 
            and firstTable.id = ?

原始查询结果集返回一个BigDecimal对象列表。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-02 22:18:21

JPA不支持UNION,要么使用原生SQL查询,要么执行两个查询。

票数 14
EN

Stack Overflow用户

发布于 2012-08-27 19:30:23

对不起,下面的示例不是,而是一个连接。

我会考虑使用具有多个根的查询。

这是Hiberante开发人员指南的一部分,代码与JPA 2.0兼容。

标准查询可以定义多个根,其效果是在新添加的根和其他根之间创建笛卡尔乘积。下面是一个匹配所有单身男性和所有单身女性的例子:

代码语言:javascript
运行
复制
CriteriaQuery query = builder.createQuery();
Root<Person> men = query.from( Person.class );
Root<Person> women = query.from( Person.class );
Predicate menRestriction = builder.and(
        builder.equal( men.get( Person_.gender ), Gender.MALE ),
        builder.equal( men.get( Person_.relationshipStatus ), RelationshipStatus.SINGLE )
);
Predicate womenRestriction = builder.and(
        builder.equal( women.get( Person_.gender ), Gender.FEMALE ),
        builder.equal( women.get( Person_.relationshipStatus ), RelationshipStatus.SINGLE )
);
query.where( builder.and( menRestriction, womenRestriction ) )
票数 4
EN

Stack Overflow用户

发布于 2012-10-31 19:13:05

如果您需要Union All,那么在我看来,有两个实体可以对它们应用继承。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9104989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档