JooQ中的DuplicateKeyException

时间:2018-11-28 11:17:42

标签: java mysql sql jooq aws-aurora

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

我有以下情况:

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

有什么方法只能捕获DuplicateKeyException吗? JooQ将异常抛出为DataAccessException。

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

我可以在两个单独的插入和更新调用中做到这一点,但是有没有办法在单个调用中做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题中有两个问题:

  

有什么方法只能捕获DuplicateKeyException吗? JooQ将异常抛出为DataAccessException。

是的。 jOOQ对于像JDBC这样的单个错误没有单独的异常类型,但是它仍然:

  

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

您可以在ON DUPLICATE KEY UPDATE的{​​{1}}子句中编码您的更新条件:

SET

在上面的示例中,INSERT INTO t (id, value) VALUES (1, 2) ON DUPLICATE KEY UPDATE SET value = CASE WHEN value = 2 THEN 3 ELSE value END 子句仅将UPDATE更新为value