联盟到JPA查询
回答
SQL支持UNION,但JPA 2.0 JPQL不支持。大多数工会可以通过连接来完成,但有些不能,有些则更难以使用连接来表达。
但是,EclipseLink支持UNION。所以,使用EclipseLink而不是JPA。
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#UNION链接EL文档举例 – Chris
根据具体情况,可以使用子查询,像:
select e
from Entity e
where e.id in
(
select e.id
from Entity2 e2
join e2.entity e
where e2.someProperty = 'value'
)
or e.id in
(
select e.id
from Entity3 e3
join e3.entity e
where e3.someProperty = 'value2'
)
如何处理情况下,如果在子查询中有超过1000个结果? – user613114
对于MS SQL,实际上它超过了2000,这并没有改变它不起作用的事实。 您可以获取所有这些ID,然后按您想要设置的限制对结果列表进行分区,然后对所有子列表执行查询并加入结果。考虑到JPA的工作方式并不是那么糟糕,但一如既往,这取决于您的使用案例。 – szczepanpp
甚至没有提到UNION的某些用法是关于避免OR(调整SQL性能时)。我个人有一个子表达式,或者非常慢。重写使用联合后,它变得更快。现在,我必须找到一个解决方案与CriteriaBuilder :( – takacsot
您可以在查询中直接使用UNION。 以下查询返回来自FRIENDSHIP表的朋友的ID。
如:
TypedQuery<String> queryFriend = em.createQuery("SELECT f.Id FROM Friendship f WHERE f.frStuId = :stuId UNION "
+ "SELECT f.frStuId FROM Friendship f WHERE f.FriendId = :stuId", String.class);
queryFriend.setParameter("stuId", stuId);
List<String> futureFriends = queryFriend.getResultList();
[UNION ALL和点心与JPA CriteriaBuilder(的
Errm nope。JPQL没有“UNION”,因为所有的答案都告诉你.JPA提供者接受的唯一方法就是它提供了卖方扩展。并且OP已经说过使用JPA提供程序了吗?不。 – DN1
- 1. SQL查询联盟
- 2. 联盟SQL查询
- 3. MySQL联盟输出查询
- 4. 与联盟的SQL查询
- 5. 联盟SQL查询性能
- 6. SQL联盟/加入查询
- 7. 联盟两个LINQ查询
- 8. SQL:联盟与子查询
- 9. 在JPA查询中的联盟 - 来自同一个表
- 10. JPA联盟的父对象
- 11. 在联盟中查看枢轴查询
- 12. JavaScript联盟对联盟查找
- 13. 联盟子查询有条件
- 14. 查询,而不联盟操作SQL
- 15. 如何写联盟查询DSL
- 16. Mysql联盟时间V.S.单独查询
- 17. MYSQL,联盟中的子查询引用
- 18. 带联盟查询的下拉列表
- 19. mysql难以查询的联盟
- 20. 查询没有联盟关键选择
- 21. 表多个SQL查询联盟
- 22. Mysql加入联盟查询按日期
- 23. MySQL联盟(或类似的)查询
- 24. TSQL - 订单查询一个联盟内
- 25. 访问联盟总和查询
- 26. 联盟表 - SQL查询/ JDBC问题
- 27. 联盟选择嵌套查询
- 28. 联盟laravel查询生成器DISTINCT
- 29. 作为子查询的联盟MySQL
- 30. 联盟找到
可能重复http://stackoverflow.com/questions/9104989/union-all-and-sum-with-jpa-criteriabuilder ) – danizmax