从网上看到的消息,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的方法会不会行不通? 如果是,为什么不行? 我还有什么其他方法可以解决这个限制?
谢谢。
当然,你可以这样做,或者也可以使用本地查询并将其映射到实体,但这很麻烦,而且不是很动态。
你一定会喜欢听到我创建了一个叫做 燃烧-持久性 它工作在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();