JPA数据源Oracle异常记录

代码执行异常

ObjectOptimisticLockingFailureException

org.springframework.orm.ObjectOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1


如果在其他事务已经删除之后,开始执行deleteById方法,这个会提示Id对应的数据不存在,和上面报错不一样

JPA通过Dao接口(JPA自带的接口,@Query的方式不会)修改/删除Entity对象,Entity对象数据库数据被删除(其他线程已删除)引起的异常,这里的后面如果执行查询,然后报错点就会在这里。(JPA的查询貌似会开启事务,应该会加入之前的事务)

NOTransactionException

org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope

没有@Transaction注解修饰的方法调用了@Transaction方法,使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行事务回滚,其他方法开启的事务会提交,但是会抛出异常。

InvalidDataAccessApiUsageException

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query

方法调用PortReleaseStoreServiceImpl.savePortStore执行JPA删除/修改没有事务支持报错.。

JPA的dao接口update/delete SQL需要事务支持,否则就抛出上面的异常信息

必须要显示声明事务,或者调用它的Service有开启事务

JpaSystemException

could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.LockAcquisitionException: could not execute statement
org.springframework.orm.jpa.JpaSystemException: Transaction was marked for rollback only; cannot commit; nested exception is org.hibernate.TransactionException: Transaction was marked for rollback only; cannot commit

两个或多个进程(或事务)互相等待对方释放资源,导致它们无法继续执行下去的状态。

引发这个异常的原因有:

  1. 修改sql造成死锁
java 复制代码
if(flag1){
    tableDao1.update();
    tableDao2.update();
}else{
    tableDao2.update();
    tableDao1.update();
}
  1. A方法开启事务,在方法中通过dao执行数据库的写入操作,发生了异常,但是这个dao执行的方法异常被捕获了,导致了当前事务被标记回滚,A方法执行完成进行了事务的提交,所以出现了事务被标记rollback还提交事务的异常提示信息出现。dao层级引发的异常,就算异常被捕获,事务还是会被标记回滚。

UnexpectedRollbackException

一个Service开启了事务,调用另一个开始事务,事务隔离级别为Propagation.REQUIRED,默认加入之前的事务,后执行的事务使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();回滚事务,原来的Service在方法执行之后,不知道事务被设置为回滚,还需要提交事务,此时事务已经被回滚,会有异常提示。(事务被标记回滚,可是还是尝试去提交事务)



SQLSyntaxErrorException

使用SEQ自增主键,指定数据库方言错误。


Oracle错误代码

ORA-01756

ORA-01756: quoted string not properly terminated

引号字符串没有正确结束

String类型' 为成对

ORA-00936

ORA-00936: missing expression

sql语法错误,缺失必要表达式 select 缺少列,或者oracle数据库in查询没有列值。

ORA-01461

ORA-01461: can bind a LONG value only for insert into a LONG column

表中VARCHAR2(100)字段插入超过100字符串

ORA-00060 || SQLState:40001


获取排他锁:在默认的 READ COMMITTED 隔离级别下,当一个事务修改数据时,它会获取排他锁,这会阻止其他事务同时修改相同的数据。同时,其他事务可以在没有阻塞的情况下读取相同的数据,因为读取操作通常获取共享锁。

java 复制代码
if(flag1){
    tableDao1.update();
    tableDao2.update();
}else{
    tableDao2.update();
    tableDao1.update();
}

ORA-02201

使用MySQL的数据库方言,在这里不支持。

相关推荐
小七蒙恩25 分钟前
java 上传txt json等类型文件解析后返回给前端
java·前端·json
郭老师的小迷弟雅思莫了1 小时前
【JAVA高级篇教学】第六篇:Springboot实现WebSocket
java·spring boot·websocket
阳光开朗_大男孩儿2 小时前
QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE(一)
开发语言·数据库·qt
神仙别闹2 小时前
基于Java+MySQL实现的(GUI)酒店管理系统(软件工程设计)
java·mysql·软件工程
正在绘制中2 小时前
Java重要面试名词整理(十五):Dubbo
java·面试·dubbo
YashanDB2 小时前
【YashanDB知识库】启动yasom时报错:sqlite connection error
数据库·yashandb·崖山数据库
小羊小羊,遇事不难2 小时前
Error: near “112136084“: syntax
java·服务器·前端
逐星ing3 小时前
【AIGC】使用Java实现Azure语音服务批量转录功能:完整指南
java·人工智能·aigc·语音识别·azure
DATA无界3 小时前
抢先体验:人大金仓数据库管理系统KingbaseES V9 最新版本 CentOS 7.9 部署体验
linux·数据库·centos
全栈师3 小时前
WinForm事件遇到异步方法的处理方式
java·开发语言·c#