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'
)
//In Your Entity class
@NamedNativeQuery(name="EntityClassName.functionName",
query="your_native_query")
//In your Repository class
@Query(native=true)
List<Result> functionName();
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();
8条答案
按热度按时间r6vfmomb1#
SQL支持UNION,但JPA 2.0 JPQL不支持,大多数联合可以用连接的方式来完成,但有些不能,有些更难用连接来表达。
Eclipse链接支持UNION。
dzhpxtsq2#
根据具体情况,可以使用子查询,如下所示:
yqlxgs2m3#
有一件事刚刚进入我的脑海(搜索完全相同的问题):
对同一个实体Map执行两个不同的JPA查询,只需将第二个结果的对象添加到第一个结果的列表(或集合以避免重复)中。
这样就可以获得与UNION相同的效果,不同之处在于使用了两个SQL语句而不是一个,但实际上,我希望它的性能与发出一个UNION语句一样好。
zaqlnxep4#
写入本地查询(设置为true,默认为false)-例如:
osh3o9ms5#
使用实体管理器。创建本机查询(...);它允许您使用UNION
czfnxgou6#
JPA没有直接的联合,我所做的是构建两个规范。
它们属于一个表,但返回不同的值
对于这个例子,它是一个任务表,在第一个说明中,我需要当前月份的任务被启用和禁用,而在第二个说明中,我只需要前几个月的任务被启用。
这是很好的,因为它的列表显示了它的页码。
这对我帮助很大,我希望这是他们正在寻找的,或者这对他们有好处。
pcww981p7#
我已经在我的项目中解决了这个问题。
如果将其更改为本机查询并按如下方式使用,则Union/Union All将起作用
以下在JPA存储库中定义本机查询的方法无法解决此问题
不会
jhdbpxl98#
您可以在查询中直接使用UNION。下面的查询返回FRIENDSHIP表中朋友的id。
例如: