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的数据库方言,在这里不支持。

相关推荐
行者全栈架构师1 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师5 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_06 小时前
mac(m5)平台编译openjdk
java
倔强的石头_1 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
唐青枫1 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
用户3521802454752 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程