zoukankan      html  css  js  c++  java
  • SQL Server2008表名中含“.”号处理方法

      在做简单的报表呈现的时候遇到数据库的表名是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]").

    问题得解。

  • 相关阅读:
    处理SVN的提交代码冲突
    Oracle对表解锁的操作
    Eclipse 安装反编译插件jadclipse
    如何由jdk的安装版本改成非安装版本
    ASP.NET Web API与Rest web api(一)
    使用C#发送正文带图片邮件
    Silverlight页面通过继承扩展实现
    九度 1347:孤岛连通工程(最小生成树)
    九度 1209:最小邮票数(多重背包)
    利用栈将中缀表达式转化成后缀表达式
  • 原文地址:https://www.cnblogs.com/roronoa/p/4176792.html
Copyright © 2011-2022 走看看