【问题标题】:Is there an equivalent of views in jpql?jpql中是否有等效的视图?
【发布时间】:2011-02-20 08:59:40
【问题描述】:

如果我有一个复杂的 where 子句,它在许多查询之间仅略有不同,在 SQL 中,我将基于大部分 where 子句创建一个视图,然后多次查询该视图。 兼顾性能和可维护性。

我在 jpql 中没有看到类似的内容。

我是我还是 jpql 规范。遗漏了什么?

干杯,菲尔

【问题讨论】:

    标签: java jpa jpql


    【解决方案1】:

    不是直接的答案,但为什么不将实体映射到 SQL 视图?在某些情况下,SQL 视图是最简单和最有效的解决方案,尤其是当数据是只读的时。只是不要滥用它们。

    【讨论】:

    • 嗨帕斯卡,感谢您的评论。如果我这样做,那么我将走出 jsql 并进入数据库供应商特定的 sql 世界。我想在我的数据库层上维护与数据库无关的视图,对我来说,这与 orm 一起是我寻找高效 jpql 解决方案的原因。干杯,菲尔。
    • @Phil Hmm...如果您的视图上映射了实体,是什么让您认为不能使用 JPQL?
    • 嗨,视图是动态的。在运行时生成,即不是模式的一部分。所以我假设要将实体映射到视图上,视图需要在实体管理器创建时存在。在我的情况下,我希望临时创建视图并在报告期间存在。
    【解决方案2】:

    在JPA2中,EntityManager和CriteriaQuery的结合非常强大:

    http://java.sun.com/javaee/6/docs/api/javax/persistence/criteria/CriteriaQuery.html

    http://java.sun.com/javaee/6/docs/api/javax/persistence/EntityManager.html#createQuery(javax.persistence.criteria.CriteriaQuery%29

    您使用 CriteriaBuilder 定义一个基本的 CriteriaQuery(有点像一个视图),然后使用实体管理器创建一个基于条件查询的查询。由于criteriaquery 是对象,它们可以在java 端重用。

    可能提供者还针对标准查询实现缓存,但我不知道。

    【讨论】:

    • 我基本上在考虑如何实现带有整体过滤器的 x 选项卡报告。 x 选项卡报告中的每个单元格都是两个表达式的 AND,每个单元格不同。并且在 sql 世界中的整体过滤器将用于创建一个视图,从中运行单元查询(假设每个单元有多个查询)。我看不出 CriteraBuilder 将如何提供帮助。在我看来,我可以使用对象而不是字符串来构建查询来创建 jpql 语句。但是最终结果(没有视图和生成的大 SQL)肯定是一样的吗?干杯,菲尔。
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2011-05-08
    相关资源
    最近更新 更多