JooQ 中的 DuplicateKeyException

Anu*_*ahu 6 java mysql sql jooq amazon-aurora

我正在使用 JooQ 在 Aurora MySQL 上执行 CRUD 操作。

我有以下场景:

  1. 如果由于重复键异常导致插入失败,则再次重试相同的操作,否则忽略异常。
  2. 如果插入失败,则在满足条件的情况下更新记录。

有没有办法只捕获 DuplicateKeyException?JooQ 将异常作为 DataAccessException 抛出。

在启用 OnDuplicateKeyUpdate 时,似乎如果记录存在,它将盲目更新数据库中的记录。我的用例是如果记录存在于数据库中,则在满足更新条件时更新记录。

我可以在两个单独的 Insert 和 Update 调用中做到这一点,但有没有办法在单个调用中做到这一点?

谢谢!!

Luk*_*der 5

你的问题有两个问题:

有没有办法只捕获 DuplicateKeyException?JooQ 将异常作为 DataAccessException 抛出。

是的当然。jOOQ 没有针对 JDBC 等单个错误的单独异常类型,但它仍然:

在启用 OnDuplicateKeyUpdate 时,似乎如果记录存在,它将盲目更新数据库中的记录。我的用例是如果记录存在于数据库中,则在满足更新条件时更新记录。

您可以在ON DUPLICATE KEY UPDATE'sSET子句中对更新条件进行编码:

INSERT INTO t (id, value)
VALUES (1, 2)
ON DUPLICATE KEY UPDATE SET
  value = CASE WHEN value = 2 THEN 3 ELSE value END
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,该UPDATE条款将更新value3只有当它是2