当前位置: 首页 > 知识库问答 >
问题:

Oracle/J2EE Hibernate:ORA-00001:由于HBM生成的序列,违反了唯一约束

郎华皓
2023-03-14
 <id name="logId" type="java.lang.Long">
        <column name="LOG_ID" precision="20" scale="0" />
        <generator class="sequence">
            <param name="sequence">TRANS_LOG_ID</param>
            <param name="allocationSize">100</param>
        </generator>
    </id>
public synchronized static void saveTransLog(String detail, String stage) {

        TransLog transLog = new TransLog();
        transLog.setDetail(detail);
        transLog.setStage(stage);

    ...

        TransLogService.save(transLog);

}

我想知道对于这些类型的多线程场景是否有更可靠的锁处理。或者我需要添加一些东西来修复我的约束违规。

非常感谢。

共有1个答案

马天逸
2023-03-14

可能是序列的当前值与行的主键冲突。您可以使用以下查询来验证这一点。

SELECT trans_log_id.curr_val FROM dual;

并将此数字与列log_id的最大值进行比较。

这两个值应该相等,或者序列的当前值应该更大。如果序列的当前值较小,则使用语句trans_log_id.next_val递增序列的值。

 类似资料:
  • 以下是SQL部分,我在调试代码时出错: ORA-00001:唯一约束主键违反T_LIAV_AGENT_STATE_APPROVAL... 这是主键约束依赖的2列AV_NAME_ID,AV_STATE... 我没有重复的数据...你认为还有其他原因吗?

  • 我正试图插入数据库,但我在日志上看到了这样的消息: 我找到了这个查询以获取违反的密钥:

  • 我有两张表, 但我做了一个组声明,以确保from\t的名称是唯一的: 我不确定我是否正确理解了这个问题。我尽了我所能,但仍然没有运气。

  • 我有一个笑话模型: 现在,当我试图迁移最后一行时,我得到了错误。基本上,我想将一个用户链接到Joke对象,因为我已经有了一个数据库,所以我希望默认值为1,这是管理员用户的id(我检查过了...).Makemigrations工作正常,但是当我尝试迁移时,我得到了这个: 我真的不明白怎么了。有什么想法吗?

  • 我在django应用程序中创建了一个模型,并从pgadmin将数据填充到表中,但现在当我试图从应用程序创建记录时,它抛出了这个完整性错误: 重复的键值违反了唯一约束“packsapp_foo_pkey” 详细信息:键(id)=(4)已经存在。 这是models.py 我是否总是必须从应用程序本身插入数据? Views.py