使用JPA与联合生成的访问视图

问题描述 投票:0回答:1

从网上看到的消息,JPA 2.0不支持SQL查询中的UNION。 这很烦人,但没有什么不能解决的。 所以,我决定在数据库中创建一个视图,从必要的表中聚合所需的数据。 因此JPA处理的只是一个简单的select语句,而不是UNIONS。 然而,视图查询是用UNION操作符生成的。 我已经验证了数据,它是有效的。

表的例子。

Country      Flow        Year 1       Year 2
--------------------------------------------    
France        A            25            78  
France        B            11            16  
France        C            18            88  
Russia        A            04            12  
Russia        B            86            99  
Russia        C            43            25  

我的想法是,我将执行一个简单的 "SELECT * FROM schema.view_name"。 它检索了视图中的一些数据,然后将其复制。 有3个表是联合在一起的。

从视图中返回的数据。

Country      Flow        Year 1       Year 2
----------------------------------------------
France        A            25            78
France        A            25            78
France        A            25            78
Russia        A            04            12
Russia        A            04            12
Russia        A            04            12

使用视图而不是使用UNION操作符传递本地SQL的方法会不会行不通? 如果是,为什么不行? 我还有什么其他方法可以解决这个限制?

谢谢。

hibernate jpa union
1个回答
0
投票

当然,你可以这样做,或者也可以使用本地查询并将其映射到实体,但这很麻烦,而且不是很动态。

你一定会喜欢听到我创建了一个叫做 燃烧-持久性 它工作在JPA之上,并支持集合操作以及JPA模型之上的许多其他高级DBMS功能。下面是一个简单的例子 文件 ,展示了如何进行联合查询。

FinalSetOperationCriteriaBuilder<Cat> cb = 
    cbf.create(em, Cat.class)
        .from(Cat.class, "cat")
        .where("name").eq("Billy")
    .unionAll() 
        .from(Cat.class, "cat")
        .where("name").eq("Johnny")
    .endSet();
© www.soinside.com 2019 - 2024. All rights reserved.