【问题标题】:Access View generated with union using JPA使用 JPA 通过联合生成的访问视图
【发布时间】:2020-05-08 14:39:43
【问题描述】:

根据我在网上阅读的内容,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】:

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

    您会很高兴听到我创建了一个名为 Blaze-Persistence 的库,该库在 JPA 之上工作,并在 JPA 模型之上支持集合操作以及许多其他高级 DBMS 功能。这是来自documentation 的一个简单示例,它展示了如何完成联合查询:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多