java - Jooq 计数方法被反引号包裹起来

标签 java mysql jooq

我最近将项目的 jooq 版本从 3.13.5 更新到 3.14.15。我已经重新运行 jooq-codegen。我使用的是 MySQL 5.7。

当运行我的一个测试时 - 它执行DAOImpl.exists。该调用生成以下异常:

org.jooq.exception.DataAccessException: SQL [select `count`(*) from `users` where `users`.`id` = ?]; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) from `users` where `users`.`id` = 1094' at line 1

    at org.jooq_3.14.15.MYSQL.debug(Unknown Source)
    at org.jooq.impl.Tools.translate(Tools.java:2903)
    at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:757)
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:389)
    at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:453)
    at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:422)
    at org.jooq.impl.AbstractResultQuery.fetchLazyNonAutoClosing(AbstractResultQuery.java:436)
    at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:613)
    at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:565)
    at org.jooq.impl.SelectImpl.fetchOne(SelectImpl.java:3034)
    at org.jooq.impl.DAOImpl.existsById(DAOImpl.java:300)
    at org.jooq.impl.DAOImpl.exists(DAOImpl.java:288)

问题是 count 有反引号。应该是 select count(*) from `users` where `users`.`id` = ?

有人遇到过这个问题并且知道如何解决吗? TIA

最佳答案

您可能指定了 RenderQuotedNames.ALWAYS 并遇到了此问题? https://github.com/jOOQ/jOOQ/issues/9931

设置ALWAYS具有误导性。它确实意味着字面上的“总是”,尽管人们可能会将其读作ALWAYSISH_I_E_ONLY_WHEN_IT_MAKES_SENSE。可能是命名设计错误,但您想要的是EXPLICIT_DEFAULT_QUOTED,请参阅文档: https://www.jooq.org/doc/latest/manual/sql-building/dsl-context/custom-settings/settings-name-style/

渲染引用名称

  • ALWAYS:这将引用所有标识符。
  • EXPLICIT_DEFAULT_QUOTED:这将引用所有未使用 DSL.unquotedName() 显式取消引用的标识符。 .
  • EXPLICIT_DEFAULT_UNQUOTED:这不会引用任何标识符,除非使用 DSL.quotedName() 显式引用它们。 .
  • NEVER:这不会引用任何标识符。
DSL.count() 中的

COUNT 是一个显式不带引号的名称,ALWAYS 将覆盖它。

关于java - Jooq 计数方法被反引号包裹起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70266931/

相关文章:

java - 使用 jooq 更新 hstore 字段

没有文件的Java反射

线程 "AWT-EventQueue-0"java.lang.NullPointerException 中的 Java 异常

java - 修改时返回新 View 的不可变集合

php - 将聊天记录存储在单个数据库表中

java - JOOQ 映射问题(DataTypeException)

java - 使用 JooQ 从 CSV 中提取 "batch insert"并同时跟踪插入的记录?

java - Eclipse:PMD 快捷方式(内置、自定义...)

MySQL:大型 VARCHAR 与 TEXT?

mysql - 使用 2 个连接创建 View 时出现问题