【问题标题】:Hooking into Hibernate's query generation挂钩到 Hibernate 的查询生成
【发布时间】: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 来构建基于用户输入的查询,因为我们不知道将选择哪些字段、应用哪些连接,甚至涉及哪些表。

标签: hibernate hook hql


【解决方案1】:

您可以使用StatementInspector 完全重写 SQL 以满足您的需要。

进一步阅读:How I can configure StatementInspector in Hibernate?

【讨论】:

    【解决方案2】:

    你不能用 Hibernate filter 做到这一点吗?当然,对于比WHERE 更复杂的事情,它是行不通的: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/filters.html

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多