【发布时间】:2018-11-22 01:03:21
【问题描述】:
我正在尝试执行一个简单的 updateRecord 函数,但它给了我一个错误,我找不到原因或任何其他人有它。
可以在以下位置找到示例测试项目: https://github.com/billbarni/jooq-studer-h2-test
Java 代码:
import static mypackage.database.model.h2.public_.Tables.EXPRESSAO;
import mypackage.database.model.h2.public_.tables.pojos.Expressao;
import mypackage.database.model.h2.public_.tables.records.ExpressaoRecord;
public void updateQuery(Expressao expressaoPojo) {
ExpressaoRecord expressaoRecord = ctx.newRecord(EXPRESSAO, expressaoPojo);
ctx.executeUpdate(expressaoRecord); // Error with this parameter
}
数据库创建表达式:
CREATE TABLE
expressao (
id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
nome VARCHAR(50) NOT NULL,
conteudo VARCHAR NOT NULL,
qtd_tempo INT NOT NULL,
tipo_tempo VARCHAR(5) NOT NULL,
data_inicial TIMESTAMP NOT NULL
);
Gradle 生成器配置:
plugins {
id 'nu.studer.jooq' version '2.0.9'
}
dependencies {
compile group: 'org.jooq', name: 'jooq-codegen', version: '3.10.4'
jooqRuntime 'com.h2database:h2:1.4.197'
}
jooq {
h2(sourceSets.main) {
jdbc {
driver = 'org.h2.Driver'
url = 'jdbc:h2:file:./db'
user = 'sa'
password = ''
}
generator {
name = 'org.jooq.util.DefaultGenerator'
strategy {
name = 'org.jooq.util.DefaultGeneratorStrategy'
}
database {
name = 'org.jooq.util.h2.H2Database'
}
generate {
relations = true
deprecated = false
records = true
immutablePojos = true
fluentSetters = true
}
target {
packageName = 'mypackage.database.model.h2'
directory = 'src/main/java'
}
}
}
}
Java 在编译之前给了我这个错误:
DSLContext 中的executeUpdate (R) 无法应用于 (mypackage.database.model.h2.public_.tables.records.ExpressaoRecord) 原因:不存在类型变量 R 的实例,因此 ExpressaoRecord 符合 UpdatableRecord
这个问题背后的原因是什么?我做错了什么?
Obs.:我有 2 个数据库(firebird 和 h2),我使用 Gradle 的 jOOQ 生成器自动生成 pojos 和其他类。他们不共享 POJO 或任何复杂的东西。这个项目非常小而且简单。
Obs 2.:我使用了多个版本的 jOOQ 库(从 3.9 到新的 3.11),问题仍然存在。
Lukas Eder,jOOQ 之神,我等待你的归来,将我从这冗长的沉睡中解救出来。
【问题讨论】:
-
我来为您解除痛苦。您可以发布
EXPRESSAO表的 DDL (CREATE TABLE) 吗? -
备案,这个问题也已经反馈给gradle-jooq-plugin:github.com/etiennestuder/gradle-jooq-plugin/issues/73