【问题标题】:Can Hibernate generate uppercase SQL?Hibernate可以生成大写SQL吗?
【发布时间】:2023-04-04 21:04:01
【问题描述】:

Hibernate 可以生成大写 SQL 吗? IE。一些可以发送的选项

SELECT table1_.prop1_ FROM my_table AS table1_;

而不是当前

select table1_.prop1_ from my_table as table1_;

我认为它的可读性要差得多,尤其是。对于长查询,HBN 倾向于吐出。 另见https://forum.hibernate.org/viewtopic.php?f=1&t=932412

谢谢

【问题讨论】:

  • 不是开源的吗?难道你就不能改变源代码来做你想做的事吗?
  • 当然。对于任何新版本,我都会一次又一次地这样做。没有。

标签: java sql hibernate orm uppercase


【解决方案1】:

发现:Hibernate 团队之王严格反对这种选择:

http://opensource.atlassian.com/projects/hibernate/browse/HB-1070

对于任何寻找此内容的人,请在此处发表评论(您不能对已关闭的问题进行投票:()

更新:另一个解决方案是替换 hibernate 的 .jar 中的 FreeMarker 模板。

【讨论】:

  • 嗯?用于 SQL 生成的 FreeMarkers 模板?这对我来说是新的(据我所知,Hibernate Tools 使用模板,而不是 Hibernate)。
【解决方案2】:

我不知道只有开箱即用才能将关键字大写的方法。但是您可以编写自己的拦截器并实现o.h.Interceptor#onPrepareStatement(String) 来随意转换sql字符串。

【讨论】:

  • 你需要做一些认真的解析工作,以避免大写应该保留原样的内容(例如,like where 子句中的单词“select”)。
  • @cherouvim:确实,这不是微不足道的。但它显然是可行的。
  • 是的,可行。我这样做是为了添加索引提示。虽然只是为了资本化,但可能不值得这样做。至少在生产中。
  • @cherouvim:我完全同意(在生产中使用“capitalizer拦截器”会产生无用的开销)。
【解决方案3】:

我不知道这会强制大写,但它确实有助于提高可读性。在您的 hibernate.cfg.xml 中,将以下内容放入您的 <session-factory> 元素中:

<!--hibernate.cfg.xml -->
<property name="format_sql">true</property>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2010-10-02
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多