【问题标题】:Hibernate slqjdbc4 column with spaces带有空格的休眠 slqjdbc4 列
【发布时间】:2014-11-24 07:54:52
【问题描述】:

我需要在 Java 中使用 hibernate 在 sqlserver 中映射一个在列名中有空格的表。 我使用Sqlserver 2008 jre7 com.microsoft.sqlserver.sqljdbc4Hibernate 3.3.2 我在不同的论坛中发现了很多类似的问题,但我阅读的解决方案都没有奏效。

我尝试使用反引号

    <property name="nameSpaces" type="string" >
        <column name="`Name with spaces`"  not-null="false" />
    </property>

这是错误

    com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '`'.

我也尝试使用 [] 括号,但 hibernate 再次将其转换为 `。

        <column name="[Name with spaces]"  not-null="false" />

      com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '`'.

最后我两个都试过了

        <column name="`[Name with spaces]`"  not-null="false" />

没有成功。

有人可以帮助我吗?是否有任何休眠配置可以更改以使用这些列名。

谢谢

【问题讨论】:

  • 为什么要在列名中首先使用空格?使用snake_case
  • 我不想要空格,不幸的是我没有设计数据库我被要求不要更改列名。
  • 朋友,我是批注迷。我尝试了它,它与注释一起工作得非常顺利。 @Entity @Table(name = "\"test_table\"") public class TestModel {@Id @Column(name="\"test id\"") private int id;公共 TestModel() { } }

标签: java sql-server hibernate sql-server-2008


【解决方案1】:

答案(由 BilalDja 提供)隐藏在上方的评论中。我发现他的回答很有帮助,所以我想我会在这里为有同样问题的其他人添加答案。

这个问题很难调试,我不得不深入挖掘 hibernate 和 jdbc 代码,最终找到为从数据库获取数据而创建的“真实”SQL 语句。然后我复制了它的值并在我的 SQL Server 数据库上手动运行它。语法错误一目了然,果然是由列名中的空格引起的。

为了解决这个问题,我只是在 BilalDja 的 cmets 中解释了有问题的列名周围的双引号,并在此处稍微扩展...

@Column(name = "\"Column name\"")
private String variableColumnWillMapTo;

就是这样,问题解决了,不再有语法错误。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 2011-02-14
    • 2018-07-06
    • 2016-01-26
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多