【发布时间】:2011-02-20 08:59:40
【问题描述】:
如果我有一个复杂的 where 子句,它在许多查询之间仅略有不同,在 SQL 中,我将基于大部分 where 子句创建一个视图,然后多次查询该视图。 兼顾性能和可维护性。
我在 jpql 中没有看到类似的内容。
我是我还是 jpql 规范。遗漏了什么?
干杯,菲尔
【问题讨论】:
如果我有一个复杂的 where 子句,它在许多查询之间仅略有不同,在 SQL 中,我将基于大部分 where 子句创建一个视图,然后多次查询该视图。 兼顾性能和可维护性。
我在 jpql 中没有看到类似的内容。
我是我还是 jpql 规范。遗漏了什么?
干杯,菲尔
【问题讨论】:
不是直接的答案,但为什么不将实体映射到 SQL 视图?在某些情况下,SQL 视图是最简单和最有效的解决方案,尤其是当数据是只读的时。只是不要滥用它们。
【讨论】:
在JPA2中,EntityManager和CriteriaQuery的结合非常强大:
http://java.sun.com/javaee/6/docs/api/javax/persistence/criteria/CriteriaQuery.html
您使用 CriteriaBuilder 定义一个基本的 CriteriaQuery(有点像一个视图),然后使用实体管理器创建一个基于条件查询的查询。由于criteriaquery 是对象,它们可以在java 端重用。
可能提供者还针对标准查询实现缓存,但我不知道。
【讨论】: