我有以下顺序:
[现在在Toad中看到]:
CREATE SEQUENCE LOG_ID_SEQ
START WITH 787585
MAXVALUE 1000000000000000000000000000
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER
/
我有以下表序列生成器:
@SequenceGenerator(name="LOG_ID_SEQ", sequenceName="LOG_ID_SEQ")
@Id
@Column(name = "log_id", nullable = false)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="LOG_ID_SEQ")
Long id;
log_id
的最高值目前为39379151
现在奇怪的问题:客户端创建了poduction数据库的转储
并将其导入测试数据库。
当我测试应用程序时,我在此表上遇到ORA-00001
唯一约束错误。
当我导入相同的转储并在我的机器上测试应用程序时,我没有收到该错误吗?
Hibernate如何实现这一目标?我不知道在哪里或者在寻找什么。
[增订]: 准确一点:在我将转储本地导入到新模式后,转储中的最后一个序列值是39354002.如果没有重置序列,我的下一个值是39379151。
答案 0 :(得分:0)
您从序列中获取的值与表格中的数据发生冲突。
max(log_id)= 39,379,151,高于你的序列“start with”value = 787,585。
使用高于max(log_id)的“start with”重新创建序列,你应该全部设置。
错误可能不一致,因为您可能没有使用每个序列值,因此如果您获得的值落在现有行之间的间隙,有时可能会成功插入。
答案 1 :(得分:0)
如果log_id
的当前最高值为39379151,但您在新架构/数据库中重新创建LOG_ID_SEQ
且起始值为787585,则插入的下一个新行将具有已存在的log_id
值。您可能应该更改CREATE SEQUENCE
语句,以反映log_id
更新的新最大值。