`
aizhimin
  • 浏览: 25183 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate映射异常,oracle 表名和字段名有么有大小写区分的问题。

阅读更多
问题源于这样一个异常:
Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at com.feosa.common.dao.BaseDao.flush(BaseDao.java:340)
	at com.feosa.common.service.BaseService.flush(BaseService.java:311)
	at com.feosa.framework.workflow.blservice.FlowFormBLServiceTest.initData(FlowFormBLServiceTest.java:57)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.sql.BatchUpdateException: ORA-00904: "INPUTCODE": 标识符无效

	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10720)
	at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 30 more


我仔细核对了hibernate的映射文件和表名(不考虑大小写的情况下)。保证一致了,但还是报这个错。
我创建表的语句是:
CREATE TABLE "RISK"."FE_FIELD_INPUT"  (
   "ID"                 INTEGER                         NOT NULL,
   "inputname"               VARCHAR2(100),
   "inputcode"           VARCHAR2(100),
   CONSTRAINT PK_FE_FIELD_INPUT PRIMARY KEY ("ID")
);


注意看,字段名是加了引号的,查看一下创建后的表,在数据库中显示确实是小写的。
所以会报上面的异常。hibernate会自动将字段名改成大写。而我数据库中是小写。

但是如果我创建语句字段名没有引号的话,oracle是不区分大小写的,会自动转换成大写。所以之前没有遇到过这种问题。
正确的创建表的语句是:
CREATE TABLE RISK.FE_FIELD_INPUT  (
   ID                 INTEGER                         NOT NULL,
   inputname               VARCHAR2(100),
   inputcode           VARCHAR2(100),
   CONSTRAINT PK_FE_FIELD_INPUT PRIMARY KEY ("ID")
);



0
3
分享到:
评论

相关推荐

    hibernate对Blob类型字段进行数据添加.txt

    ### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...

    hibernate主键生成策略

    - 可以通过 `<param>` 元素自定义表名和字段名。 - 默认表名为 `hibernate_unique_key`,默认字段名为 `next_hi`。 ##### 7. **SeqHiLo** - **简介**:`seqhilo` 策略类似于 `hilo`,但主键历史存储在 Sequence ...

    Hibernate入门之自己写的小例子的总结

    以下是一个简单的步骤来创建和运行一个基于Hibernate的小例子: 1. **环境准备**: 首先,你需要安装Java集成开发环境(例如JB7.0)以及Hibernate库。在这个例子中,使用的是Hibernate 2.0.3版本,同时还需要...

    hibernate注解中的名词解释

    3. **@Table**: 此注解用来指定实体Bean映射到的数据库表名,也可以指定目录(catalog)和模式(schema)名。这对于在多级命名空间中组织数据库对象很有用。 4. **@Column**: 这个注解用于定义实体Bean中的属性如何...

    1000道互联网Java架构师面试题

    当实体类中的属性名和表中的字段名不一样,可以使用 MyBatis 的 ResultMap 来解决: * 使用 ResultMap 将表中的字段名映射到实体类中的属性名。 模糊查询 like 语句该怎么写? 模糊查询 like 语句可以使用 ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

     7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。  SQL Server 2000与以前版本相比较,又具有以下新特性 :  1.支持XML(Extensive Markup Language,扩展标记语言)  2.强大的...

    SqlToolBox 1.8.2

    提供Redo/Undo,Shift整体退格进格,大小写转化,将Sql语句用StringBuilder包容以及将Sql语句中关键字大写表示等常用文字编辑功能。这些都能帮助程序员在程序中书写Sql语句。 8. 能保存和记忆数据库信息,以便下次...

    java学习之路

    在Java中,递归通常用于解决可以通过分解为更小问题来解决的问题。例如,计算阶乘、遍历树结构等。 - 递归函数的设计需要考虑两个关键点:递归终止条件和递归规则。 #### 集合类、泛型、自动打包与解包、Annotation...

    java面试知识

    ##### Hibernate中get和load的区别 - **get**:立即加载对象,如果找不到对应记录,则抛出异常。 - **load**:延迟加载对象,如果找不到记录,则返回null。 ##### Hibernate、Ibatis、Jdbc三者的区别 - **...

    springmybatis

    请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应() 重写测试代码 程序代码 程序代码 public static void main(String[] args) { SqlSession session = ...

Global site tag (gtag.js) - Google Analytics