使用Hibernate连接Oracle 无法识别生成的SQL问题
问题:
在JAVA工程中,数据库使用的是OracleXE(Oracle10g Express Edition)。 使用hibernate.reveng.xml创建了实体类及其DAO类,如:
tt.myutils.dao
|--User.java
|--UserHome.java
|--User.hbm.xml
由于没有JNDI容器,因此对UserHome.java进行了如下修改,使代码能够运行:
protected SessionFactory getSessionFactory() {
try {
Configuration cfg = new Configuration().configure();
Properties p = cfg.getProperties();
StandardServiceRegistryBuilder b = new StandardServiceRegistryBuilder().applySettings(p);
ServiceRegistry sr = b.build();
return cfg.buildSessionFactory(sr);
}
catch (Throwable ex) {
System.out.println("创建SessionFactory时出错!"+ex);
throw new ExceptionInInitializerError(ex);
}
}
主程序也很简单:
package tt; import tt.myutils.dao.User;
import tt.myutils.dao.UserHome; public class Tester { public static void main(String[] args) {
UserHome gh = new UserHome();
User obj = gh.findById("张三");
System.out.println("获取记录信息:" + obj.getPwd());
}
}
调试程序,出现以下“表名无效”错误(也可能是“SQL 命令未正确结束”):
将上述SQL语句输出拷贝到SQL PL下执行,也报同样错误,说明是Hibernate生成的SQL语句语法有问题。
分析:
oracle建表时,如果建表的SQL同时满足以下条件,则不论在查询或新增数据时都必须把相应SQL中的表名用引号括起来,否则会报00942错误。
条件1. 建表的SQL中表名、列名用引号 " 括起来了。
条件2. 建表的SQL中表名中英文字符不全部都是大写。
试用Navcat等工具建立Oracle表时,是必须添加引号的,如Navcat工具生成的脚本:
CREATE TABLE "BIZ"."NewTable" (
"ID" NUMBER(4) NULL ,
"NAME" VARCHAR2(32) NULL ,
"ADDRESS" VARCHAR2(64) NULL
)
NOCOMPRESS
;
也就是说,用工具生成的表,以后ORACLE只识别带 " 的SQL
解决办法:
在User.hbm.xml中解决,靠手工吧:把出现的所有表、列用""括起来。而XML不能直接插入",必须用XML转义符"如下所示:
<hibernate-mapping>
<class name="tt.myutils.dao.User" table=""USER"">
<id name="usr" type="string">
<column name=""USR"" length="30" />
<generator class="assigned" />
</id>
<property name="pwd" type="string">
<column name=""PWD"" length="64" />
</property>
</class>
</hibernate-mapping>
现在,Hibernate输出的SQL语句变成了
select
user0_."USR" as USR1_0_0_,
user0_."PWD" as PWD2_0_0_
from
BIZ."USER" user0_
where
user0_."USR"=?
结果就正确了。
总结:
Oracle的语法搞的鬼。
n
使用Hibernate连接Oracle 无法识别生成的SQL问题的更多相关文章
- 【转】Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
原文链接:http://www.cnblogs.com/quanyongan/p/3152290.html 最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 ...
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate 如果是在配置文件的话那就是dynamic -insert 和 dynamic- ...
- hibernate 连接oracle数据库的配置 (参考)
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC &qu ...
- hibernate连接Oracle rac
连接方式与普通的数据库不一样.connection.url 中使用了LOAD-BALANCE = yes 要不然会报错 <hibernate-configuration> <sess ...
- hibernate连接oracle
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC & ...
- hibernate 连接 oracle数据库
前言:以下所有的操作都是基于你已经成功安装了oracle数据库并且java的开发环境正常的情况下进行的. 如果没有完善请先配置基础环境. 第一步:配置需要的环境(下载并导入需要的包). 我的百度云盘里 ...
- Hibernate用Oracle的sequence生成自增Id
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBL ...
- hibernate连接oracle12c数据库报:java.sql.SQLException: ORA-01017: 用户名/口令无效; 登录被拒绝。(用户名/口令在oracle客户端以及cmd命令都能登入)
报错信息: 2017-09-22 15:40:07,354 WARN [org.hibernate.cfg.SettingsFactory] - Could not obtain connection ...
- Java笔记8:Hibernate连接Oracle
1下载hibernate-3.6.0 Final.zip到任意目录,解压缩后得到hibernate目录 2下载slf4j-1.7.13.zip到任意目录,解压缩后得到slf4j-1.7.13 3操作数 ...
随机推荐
- 通用javascript脚本函数库
/* 名字:Common.js 功能:通用javascript脚本函数库 包括: 1.Trim(str)--去除字符串两边的空格 2.XMLEncode(str)--对字符串进行XML编码 3.Sho ...
- tomcat中同时部署两个项目的问题
其中一个项目总是无法访问. 参考这两篇文章: 1. tomcat中同时部署两个项目的问题 2. java.lang.IllegalStateException: Web app root system ...
- QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...
- Leetcode 226 Invert Binary Tree 二叉树
交换左右叶子节点 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]
原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[Embossed] Embossed(浮雕效果) 浮雕效果主要有两个参数:Amount和Wid ...
- WPF学习目录
基本概念 数据源Source-目标Target WPF生命周期 App.xaml 依赖属性 WPF路由 线程操纵UI问题 利用属性中设置.查看DataContext/Command等 分析布局 写数据 ...
- WPF 4 单词拼写检查(SpellCheck)
原文:WPF 4 单词拼写检查(SpellCheck) 在WPF中 Textbox 和RichTextBox 控件都内置了拼写检查属性,但该属性目前默认仅支持English.Spanish. ...
- Wrapped的返回值取值
Bared Wrapped using Newtonsoft.Json; using Newtonsoft.Json.Linq; string str = JsonConvert.Serial ...
- Bootstrap 添加到项目
至少在项目中添加以下三个文件 1 添加css文件 <link href="~/Bootstrap3.3.7/css/bootstrap.min.css" rel=" ...
- Visual Studio更改编码格式为“UTF-8”
原文:Visual Studio更改编码格式为"UTF-8" 用VS2015新建了个Python文件,在VS2015打开时中文显示正常, 用Visual Studio Code文本 ...