我们有一个可以使用多年的应用程序,并且我们也在使用相同的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;

10-08 17:18