gpt4 book ai didi

java - 如何在JPA中使用UNION ALL?

转载 作者:行者123 更新时间:2023-11-30 02:36:39 30 4
gpt4 key购买 nike

我的问题是如何在 JPA 中执行 UNION ALL 子句?可以使用@NamedQuery吗?该查询在每个 SELECT 语句中一次使用 2 个表,最后使用 ORDER BY

    SELECT 0 as intorder, u.id, q.order_type
FROM test_union u, test_query q
WHERE u.id = q.id
AND u.type is NULL
AND q.field1 = 'DEFAULTS'
UNION ALL
SELECT 1 as intorder, u.id, q.order_type
FROM test_union u, test_query q
WHERE u.id = q.id
AND u.type is NOT NULL
AND q.field1 = 'TESTING'
UNION ALL
SELECT 2 as intorder, u.id, q.order_type
FROM test_union u, test_query q
WHERE u.id = q.id
AND u.type is NULL
AND q.field1 = 'DEFAULTS'
ORDER BY intorder, q.order_type;

最佳答案

由于 Jpql 和 Hql(其中一个是另一个的子集,JPA 使用 Jpql)不支持 UNION,因此您需要使用适合您的数据库查询语言的 native 查询。实现可能如下所示:

@Entity
@NamedNativeQuery(
name="EntityClassName.functionName"
, query="SELECT .. "
+ "UNION ALL "
+ "SELECT .."
, resultClass=YourResultClass.class`
)

直接在您的实体之一和存储库界面中:

public interface EntityClassNameRepository extends JpaRepository<EntityClassName, Long> {

@Query(nativeQuery = true)
List<YourResultClass> functionName(parameter list)

当我做一些同样的事情时,YourResultClass 需要成为一个实体。

另一种解决方案是将 UNION 从数据库中提取到 JVM 中,其中多个查询结果会增强列表。之后还可以对列表进行排序( How to sort a ArrayList in Java? )。

关于java - 如何在JPA中使用UNION ALL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860694/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com