问题源于这样一个异常:
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")
);
分享到:
相关推荐
### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...
- 可以通过 `<param>` 元素自定义表名和字段名。 - 默认表名为 `hibernate_unique_key`,默认字段名为 `next_hi`。 ##### 7. **SeqHiLo** - **简介**:`seqhilo` 策略类似于 `hilo`,但主键历史存储在 Sequence ...
以下是一个简单的步骤来创建和运行一个基于Hibernate的小例子: 1. **环境准备**: 首先,你需要安装Java集成开发环境(例如JB7.0)以及Hibernate库。在这个例子中,使用的是Hibernate 2.0.3版本,同时还需要...
3. **@Table**: 此注解用来指定实体Bean映射到的数据库表名,也可以指定目录(catalog)和模式(schema)名。这对于在多级命名空间中组织数据库对象很有用。 4. **@Column**: 这个注解用于定义实体Bean中的属性如何...
当实体类中的属性名和表中的字段名不一样,可以使用 MyBatis 的 ResultMap 来解决: * 使用 ResultMap 将表中的字段名映射到实体类中的属性名。 模糊查询 like 语句该怎么写? 模糊查询 like 语句可以使用 ...
7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。 SQL Server 2000与以前版本相比较,又具有以下新特性 : 1.支持XML(Extensive Markup Language,扩展标记语言) 2.强大的...
提供Redo/Undo,Shift整体退格进格,大小写转化,将Sql语句用StringBuilder包容以及将Sql语句中关键字大写表示等常用文字编辑功能。这些都能帮助程序员在程序中书写Sql语句。 8. 能保存和记忆数据库信息,以便下次...
在Java中,递归通常用于解决可以通过分解为更小问题来解决的问题。例如,计算阶乘、遍历树结构等。 - 递归函数的设计需要考虑两个关键点:递归终止条件和递归规则。 #### 集合类、泛型、自动打包与解包、Annotation...
##### Hibernate中get和load的区别 - **get**:立即加载对象,如果找不到对应记录,则抛出异常。 - **load**:延迟加载对象,如果找不到记录,则返回null。 ##### Hibernate、Ibatis、Jdbc三者的区别 - **...
请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应() 重写测试代码 程序代码 程序代码 public static void main(String[] args) { SqlSession session = ...