SQL Server2008表名中含“.”号处理方法

本文详细介绍了在使用Hibernate进行报表呈现时,遇到数据库表名包含特殊字符.导致的查询错误。通过在Navicat中验证查询语句的有效性,并最终采用FROM [数据库名].[dbo].[表名]的形式解决了问题,同时分享了将实体类@Table注解修改为包含表名的方式。

  在做简单的报表呈现的时候遇到数据库的表名是XX.XXX这种命名形式(数据库用的是SQL Server2008,"."是合法的字符,持久层框架是hibernate),如果用@Entity注释,在取数据的时候就会抛出sql异常:对象名无效,原因是hibernate将"."号后面的作为了表名进行hql语句的拼接。由于数据库是设计好不能更改表名的了,所以只好尝试各种方法。

  首先我百度了很久,没找到有出现这种情况的(大概是很少有人这样设计表名),于是我尝试使用转义、单引号、双引号、括号等各种能想到的靠谱甚至不靠谱的方法,一一失败。

  后来在师兄的提点下,先在navicat里用sql语句查询,看是否能取出数据。发现如果表名加了双引号或单引号是可以取到数据的,但是对我的问题还是没能解决。

  于是师兄又建议我直接用原生的sql来查询,不使用hibernate的hql语句:select * from XX.XXX,然后创建SQLquery对象来执行,结果显示能取到数据,但这样拿到的数据我还需要再手动进行包装,将object对象转成我要的类对象,着实麻烦。于是我又回到百度……

      这一次终于让我浪里淘沙找到有用的信息,即用 "FROM [数据库名].[dbo].[表名]"这种形式来查询,当我在Java类里面直接执行这一语句的时候还是报了错,后来一分析,hql是根据对象来查询的,他是先找到Java类对象,再根据类对象所映射的表名拼接到hql语句来执行查询的,所以我将实体类的注释改为@Table(name="[数据库名].[dbo].[XX.XXX]").

问题得解。

转载于:https://www.cnblogs.com/roronoa/p/4176792.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值