【发布时间】:2014-03-16 10:21:44
【问题描述】:
我想用预处理器实现虚拟视图。一个简单的例子:
之前的HQL:
FROM PublishedArticle a
之后的有效 HQL:
FROM Article a
WHERE a.published = true
本质上,我需要一种在查询被执行之前对其进行处理的方法(而不是动态创建视图,这会带来很高的成本)。
【问题讨论】:
-
HQL 在部署时被解析
-
你不能直接在你的 DBMS 中创建一个
PublishedArticle视图吗?您使用的是什么 DBMS? -
@sp00m 这些动态视图可能取决于用户。至少这是计划。
-
@vbence 用户依赖是什么意思? DBMS 中的
PublishedArticle视图将简单地列出任何Article,例如a.published = true。 -
据我所知,Hibernate 使用 ANTLR 将 HQL 转换为 SQL,我还没有看到 ANTLR 公开任何挂钩或事件来自定义树生成过程。因此,我怀疑 Hibernate 是否会提供任何挂钩。我会说创建自定义的动态查询将是唯一的方法。在我当前的应用程序中,我们允许用户创建完全动态的查询。我们使用 QueryDSL 和 Hibernate JPA 来构建基于用户输入的查询,因为我们不知道将选择哪些字段、应用哪些连接,甚至涉及哪些表。