【问题标题】:How to prevent Hibernate formula annotation of adding table name before reserved words?如何防止Hibernate公式注释在保留字前添加表名?
【发布时间】:2014-06-13 16:05:04
【问题描述】:

我的班级映射如下:

@Entity
public class Order {
    private String formulatedProp;

    @Formula(value="(SELECT ',' + coalesce(a.description,a.code) 
                    FROM another_table a 
                    WHERE a.order_id=id FOR XML PATH(''))")
    public String getFormulatedProp() {
        return formulatedProp;
    }
}

公式的 SQL 查询在单独执行时很好。但是当 Hibernate 生成查询以获取 Order 时,它会将表的别名附加到 FORXML 单词。所以它会尝试执行类似

的查询
SELECT ',' + coalesce(a.description,a.code) 
    FROM another_table a 
    WHERE a.order_id=order0_.id order0_.FOR order0_.XML PATH('')

这显然是错误的。我怎样才能做到这一点?
环境:Hibernate 3.6SQL-Server 2008

附注我知道自定义方言可以成为一种解决方案,但我不想朝那个方向发展。

【问题讨论】:

  • 尝试将您的逻辑外部化以发挥作用(CREATE FUNCTION)。
  • @Eugene 感谢您的建议。会试一试:)

标签: java sql-server hibernate


【解决方案1】:

您可以使用我在此问题中编写的相同解决方案:https://stackoverflow.com/a/26907699/825061

简短的回答是扩展您使用的休眠方言类并注册您的新保留字。

【讨论】:

  • 我当时的偏好是不使用自定义方言(请参阅问题中的 P.S.),所以这不是问题的答案,但值得 +1 恕我直言 :-)。我什至不是在同一个工作 ATM ;-) 但这可能有助于人们登陆这个页面。
  • 我没有注意到 P.S.。感谢您的 +1。
猜你喜欢
  • 2016-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2021-02-05
相关资源
最近更新 更多