程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 jOOQ 中使用部分索引更新“在冲突时进行更新”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 jOOQ 中使用部分索引更新“在冲突时进行更新”?

开发过程中遇到在 jOOQ 中使用部分索引更新“在冲突时进行更新”的问题如何解决?下面主要结合日常开发的经验,给出你关于在 jOOQ 中使用部分索引更新“在冲突时进行更新”的解决方法建议,希望对你解决在 jOOQ 中使用部分索引更新“在冲突时进行更新”有所启发或帮助;

我在表 @H_724_3@mY_table 上有一个部分索引,其定义如下:

CREATE UNIQUE INDEX my_index 
    ON MY_table(CUSTOMER_ID,owneR_ID) 
    WHERE CLOSED_ON IS NulL;

然后,我正在尝试使用 jOOQ 进行 upsert

final var insert = using(configuration)
           .inserTinto(MY_table,MY_table.CUSTOMER_ID,MY_table.owneR_ID,MY_table.updatED_ON);
customers.forEach(custID -> insert.values(custID,reprID,today));
insert.onConflict(MY_table.CUSTOMER_ID,MY_table.owneR_ID)
    .where(MY_table.CLOSED_ON.isNull())
    .doupdate()
    .set(MY_table.updatED_ON,today)
    .execute();

但是上面的代码抛出了这个错误:

org.jooq.exception.DataAccessException: sql [...];
   ERROR: invalID reference to FROM-clause entry for table "my_table"
   Hint: There is an entry for table "my_table",but it cAnnot be referenced from this part of the query.

查看生成的 sql,我看到 jOOQ 正在将架构和表名添加到 whereon conflict 部分,POSTGRes 不喜欢:

... on conflict ("customer_ID","owner_ID") where "my_scheR_128_11845@a"."my_table"."closed_on" is null do update set ...

有没有办法告诉 jOOQ 不要添加架构和表名?

这是我正在使用的解决方法,但我想知道是否有更好的方法:

.where(condition("closed_on IS NulL"))

解决方法

我们在 jOOQ 的问题页面中发现了一个错误报告,该报告正是提出了这个问题:

https://github.com/jOOQ/jOOQ/issues/11732

其中提到了这种解决方法:

.where(field(COURSE_ENROLl.deletED_Ts.getUnqualifiedName()).isNull())

@R_372_9447@这样做,而不是在我的情况下使用文字字符串。

这也被提到是 3 周前修复的错误 :)

谢谢。

编辑: jOOQ 3.14.9 中已经修复了这个问题

@H_450_63@
@H_450_63@

大佬总结

以上是大佬教程为你收集整理的在 jOOQ 中使用部分索引更新“在冲突时进行更新”全部内容,希望文章能够帮你解决在 jOOQ 中使用部分索引更新“在冲突时进行更新”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。