2014-09-29 59 views
1

我需要在Java中用hibernate映射sqlserver中的一个表,它在列名中有空格。 我使用Sqlserver 2008jre7com.microsoft.sqlserver.sqljdbc4Hibernate 3.3.2 我在不同的论坛中发现了很多类似的问题,但是我没有读到解决方案。带空格的Hibernate slqjdbc4列

我尝试使用反引号

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

这是错误

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

我也试图使用[] brakets但在休眠`再次转换它。

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

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

最后我也尝试过他们两人的

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

没有成功。

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

谢谢

+0

为什么你想在第一个地方列名空间?使用snake_case – BilalDja 2014-09-29 20:21:11

+0

我不想要空格,不幸的是我没有设计数据库,我被要求不要更改列名。 – Panciz 2014-09-30 08:02:57

+1

我的朋友,我是注释迷。我尝试一下,它的注释非常流畅。 @Entity @Table(name =“\”test_table \“”) public class TestModel {@Id @Column(name =“\”test id \“”) \t private int id; \t public TestModel(){ \t} } – BilalDja 2014-09-30 11:05:14

回答

0

答案(by BilalDja)隐藏在上面的评论。我发现他的答案很有帮助,所以我想我会在这里为其他人解决同样问题的答案。

这个问题很难调试,我不得不深入研究hibernate和jdbc代码,以最终找到为从数据库中获取数据而创建的“真实”SQL语句。然后我复制了它的值并在我的SQL Server数据库上手动运行它。直接来说,语法错误是显而易见的,而且足够肯定它是由列名中的空格引起的。

为了解决这个问题我刚刚逃脱周围有问题的列名的双引号中BilalDja的评论和解释在这里稍微扩大...

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

就是这样,问题就解决了,没有更多的语法错误。