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

更新批存储区jooq上唯一约束的记录

辛可人
2023-03-14

我正在尝试使用jooq使用batchStore插入记录。我需要知道如何在唯一约束上更新记录,目前它抛出一个异常,该记录已经存在

SQL Error [23505]: ERROR: duplicate key value violates unique constraint

下面是代码

DSLContext create = getDSLContext();
List<UserRecord> userRecordList = new ArrayList<>();
for (Users user : model.getUsers()) {
    User record = create.newRecord(user);
    userRecordList.add(record);
}
create.batchStore(userRecordList).execute();

目前,它可以很好地插入记录,但当根据唯一约束发现重复记录时,它应该更新记录

共有2个答案

陈鸿才
2023-03-14

我必须和JN_新手一样。为了完整起见,下面是我的解决方案。

// OpeningtimeRecord is the JOOG generated record for the Openingtime table.
List<OpeningtimeRecord> openingRecords = new ArrayList<>();

// Openingtime is the POJO generated from the database schema for the table.
for (Openingtime opening : openings)
{
    // Check to see if this record already exists in the database
    OpeningtimeRecord record = dbContext.fetchOne(*TABLE*, *TABLE.ID*.eq(opening.getId()));

    // If it doesn't exist then we need to create a new record
    if (null == record)
    {
        record = dbContext.newRecord(*TABLE*, opening);
    }
    else
    {
        // Update the record with any new data from the POJO.
        record.from(opening);
    }

    openingRecords.add(record);
}

int[] results = this.dbContext.batchStore(openingRecords).execute();
韦志新
2023-03-14

我通过使用公共接口UpdateableRecord解决了这个问题,首先我使用了fetchOne()查询,根据唯一约束获取记录,该约束将给出UpdateableRecord,然后使用更新后的值设置值,这些值将添加到userRecordlist,并进一步传递到batchStore

 类似资料:
  • 我的桌子有两个独特的列: 我想写保存或更新方法 My jooq code: 但我遇到了异常: “错误:没有唯一或排除约束匹配ON CONFLICT规范” 请帮助。

  • 我有以下JPA实体 这是我检查唯一约束的测试,插入具有相同电子邮件的另一个用户。

  • 我的应用程序中不断出现此错误 重复的键值违反唯一约束“product\u supplierinfo\u pkey”详细信息:键(id)=(409)已存在。 这在表product_supplierinfo中。 关键约束需要的实际下一个序列号是5461,而不是409。 有人能告诉我更新此密钥唯一约束的正确查询吗?

  • 我正在使用jOOQ为我的数据库表生成POJO。这很有效。 我有一个带有主键()和唯一键()的表。更新记录时,jOOQ使用主键。 我想通过使用唯一键而不是主键来更新记录。 https://github.com/jOOQ/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java 本质上,我想用另一个键(第二个参

  • 问题内容: 我有一张标签列表,按标签顺序显示。为了确保没有两行可以具有相同的等级,它们的值是唯一的: 不管是PostgreSQL还是MySQL,它们都表现出相同的行为。查询可能看起来像。假设该表包含: 现在,假设我想重新排序两个标签,例如Apple在Cow之前排名。最简单的方法是交换其等级值: 没有。也不: 甚至没有: 每次,唯一约束都会在第一行更新时触发,并中止该操作。如果我可以将支票推迟到帐单

  • 主要内容:在创建表时设置唯一约束,在修改表时添加唯一约束,删除唯一约束MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。 唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但