使用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操作数 ...
随机推荐
- jquery即点击改
$(document).on("click",".sp",function(){ var brand_id=$(this).attr("valu ...
- 扪心自问,强大的UI框架,给我们带来了什么?(作者因此写了一个GuiLite)
MFC, QT, MINIGUI, ANDROID, IOS,如果这些平台,你都使用过,在下真心佩服,也相信你对这篇文章最具有发言权,真心期待你的回复和建议. 这些著名的UI说出来都让人如雷贯耳,如果 ...
- android延时处理任务范例
今天要做一个任务,要求图片做button开关,点击出发对应事件.点击打开,图片左边显示几行字体,这几行字体是延时显示的.以下将主要代码附上.以下是main.xml <?xml version=& ...
- 王立平--android这四个组成部分
Android中称为四大组件的为别为:Activity/Service/BroadCast Recevicer/Content provider Activity:activity是用户和应用程序交 ...
- React HOC
在React官网文档学习React HOC,整个看了一遍还是云里雾里的,于是按照官网文档,自己动手实践一下.官网地址:React 高阶组件 定义:高阶组件就是一个函数,且该函数接受一个组件作为参数,并 ...
- Java数据结构和算法的数组
阵列的功能: 1.固定大小 2.相同的数据类型 3. 4.数据项可反复 Java数据类型:基本类型(int和double)和对象类型.在很多编程语言中.数组也是基本类型.但在Java中把它们当作对象来 ...
- Symbol not found: _lua_objlen
lua: error loading module 'cjson' from file '/usr/local/lib/lua/5.3/cjson.so': dlopen(/usr/local/lib ...
- 使用StringBuilder与SqlParameter
好处: 防止sql注入:占用内存更少 例子: 传参有业务查询条件startDate,endDate,A,每页数据个数pageSize,当前查询页码pageIndex string sql = @&qu ...
- WPF 代码实现动画
<Window x:Class="wpf180709.Window2" xmlns="http://schemas.microsoft.com/win ...
- WCF的几个注意事项
wcf托管服务注意的问题 加上项目分为客户端-WCF服务-逻辑层-数据库三层wcf一直出现异常,说没有初始化啊之类的,如果你的逻辑代码确定没有问题的话,思考是不是wcf的配置文件(app.config ...