Spring Boot+Hibernate Envers迁移后报REVINFO_SEQ序列不存在
解决Hibernate Envers升级后序列不存在的问题
问题根源
Hibernate Envers 5.x版本默认使用的修订序列名称是REV_SEQ,但升级到6.x后,默认序列名改为了REVINFO_SEQ。你的数据库里还是旧版本创建的REV_SEQ,所以新版本Envers执行操作时找不到REVINFO_SEQ,抛出ORA-02289错误。
可行解决方法
方法1:修改数据库序列(或创建同义词)
直接在Oracle数据库中执行以下操作之一:
- 重命名旧序列适配新名称:
ALTER SEQUENCE REV_SEQ RENAME TO REVINFO_SEQ; - 或者创建同义词(保留原序列名称的前提下兼容):
CREATE SYNONYM REVINFO_SEQ FOR REV_SEQ;
方法2:配置Envers使用旧序列名
在Spring Boot配置文件(application.properties或application.yml)中添加Envers专属配置,强制使用原来的REV_SEQ序列:
- 若用properties格式:
spring.jpa.properties.org.hibernate.envers.revision_sequence_name=REV_SEQ - 若用yml格式:
spring: jpa: properties: org: hibernate: envers: revision_sequence_name: REV_SEQ
额外检查
如果你自定义了修订实体(继承DefaultRevisionEntity或实现RevisionEntity),检查是否使用了@RevisionSequence注解,若有需确保注解中指定的序列名和数据库中存在的序列一致,比如:
@RevisionSequence(name = "REV_SEQ")
内容的提问来源于stack exchange,提问作者Lolly
相关产品推荐
相关产品推荐

