我们有一个可以使用多年的应用程序,并且我们也在使用相同的oracle数据库。但是将我们的数据库从一台主机迁移到另一台主机。
DB:ORACLE
现在突然之间,我们开始追随异常,
“org.springframework.dao.DataIntegrityViolationException: ORA-00001: unique constraint (YYY.XXX_LOG_PK) violated;
SQL [n/a]; constraint [YYY.XXX_LOG_PK]; nested exception is org.hibernate.exception.ConstraintViolationException: ORA-00001: unique constraint (YYY.XXX_LOG_PK) violated”
码:
@SequenceGenerator(name = "TT_SEQUENCE_GENERATOR", sequenceName = "YYY.XXX_LOG_SEQ")
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TT_SEQUENCE_GENERATOR")
@Column(name = "ID")
public Long getId() {
return this.id;
}
DB中的顺序:
CREATED 07-NOV-17
LAST_DDL_TIME 07-NOV-17
SEQUENCE_OWNER TT
SEQUENCE_NAME YYY.XXX_LOG_SEQ
MIN_VALUE 1
MAX_VALUE 999999999999999999999999999
INCREMENT_BY 1
CYCLE_FLAG N
ORDER_FLAG N
CACHE_SIZE 0
LAST_NUMBER 75305
问题:
当我们尝试通过JPA代码插入一些记录时,我们得到了上述异常,但是当我尝试使用sequence.nextval将一些记录插入数据库时,它没有给出任何异常。
无论如何,我可以调试以发现异常吗?我还尝试了show_sql-我也无法找到解决方案,因为这不会在控制台中打印下一个序列号
如果您知道解决方法,请向我指出正确的方向。
最佳答案
自增序列遇到唯一约束冲突的最常见情况是数据迁移时,导致数据的最大值超过序列值。
首先查询余辉当前值:
SELECT seqname.CURRVAL FROM dual
然后修改序列值,以确保序列的nextval超过数据的当前最大值。
ALTER SEQUENCE seqname INCREMENT BY XXXXXX;
SELECT seqname.NEXTVAL FROM dual;