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

使用JOOQ插入可更新记录时如何忽略重复键错误

潘灵均
2023-03-14

我目前使用JOOQ的可更新记录如下模式插入:

MyRecord myRecord = new MyRecord();
try (var txn = tm.beginWriteTransaction()) {
  myRecord.setA("value");
  myRecord.insert();
  txn.commit();
}

txn之后。commit(),我希望使用数据库中的值更新myRecord,例如,如果表具有自动递增的列idmyRecord。getId()返回其值。

如果列a具有唯一约束,则当违反该约束时,txn.commit()将抛出DataAccessExc0019。我的问题是可以告诉JOOQ不要抛出异常,但仍然用现有的值更新记录吗?

共有1个答案

曾飞沉
2023-03-14

有一个挂起的功能请求,需要将UPSERT功能添加updateablerecord:#1234。

同时,您可以将您的记录嵌入到普通的SQL查询中:

MyRecord myRecord = new MyRecord();
try (var txn = tm.beginWriteTransaction()) {
  myRecord.setA("value");
  myRecord = dsl
     .insertInto(MY_TABLE)
     .set(myRecord)
     .onDuplicateKeyUpdate()
     .set(myRecord)
     .returning()
     .fetch();
  txn.commit();
}
 类似资料:
  • 我的例子如下: Person是一个简单的实体,有3个字段“Long id、String name、intger age”,并且映射到相应的Person表,上面有3列) 有没有办法通过使用@Query 重要的 请帮帮忙。

  • 我试图在jOOQ 3.4.2中使用UpdateableRecords插入一个新记录。该模式非常简洁且易于使用,除了将空值读取为无值,并忽略默认值或生成的索引。我如何使用UpdateableRecord来执行一个尊重默认值和生成索引的插入? 这是我的桌子: 注意我的主键和默认值。下面是我的jOOQ代码: 但是当我运行这个程序时,我会在“org\u person\u id”列中得到一个错误。 我注意到

  • 我希望用同一行中其他列的相关值更新列。我正在更新的列是唯一的,如果执行此操作,我有时会出现重复的键错误。我希望忽略这些错误,只更新其中一条记录,忽略其他记录。 我的查询如下所示: 现在,在Fname和Lname两行匹配的情况下,我只希望更新第一个记录Coolname。 谢谢(MS SQL Server)

  • 问题内容: 我遵循“ 是否可以编写数据类型转换器来处理postgresJSON列”中的答案? 实现nodeObject转换器。 然后,我尝试使用可更新的记录来插入一条记录,但出现了 “ org.jooq.exception.SQLDialectNotSupportedException:方言POSTGRES不支持类型为org.postgresql.util.PGobject的类”。 我该如何解决?

  • 问题内容: 我正在使用PHP。 请问什么是将新记录插入具有唯一字段的数据库的正确方法。我正在批量插入很多记录,我只想插入新记录,并且我不想重复条目有任何错误。 有没有唯一方法可以首先进行SELECT并查看条目是否在INSERT之前已经存在-并且仅在SELECT不返回任何记录时才插入INSERT?我希望不是。 我想以某种方式告诉MySQL忽略这些插入而没有任何错误。 谢谢 问题答案: 如果在重复记录