我试图执行一个简单的更新记录函数,但它给我一个错误,我找不到原因或任何其他人有它。
可以在以下位置找到示例测试项目: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
);
梯度发生器配置:
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中执行更新(R)
这个问题背后的原因是什么?我做错了什么?
观察。:我有2个数据库(Firebird和h2),我使用Gradle的jOOQ生成器自动生成pojos和其他类。他们不共享POJOs或任何复杂的东西。该项目非常小而简单。
Obs 2:我使用了jOOQ库的几个版本(从3.9到新的3.11),问题仍然存在。
卢卡斯·埃德尔,约克之神,我等待你的归来,将我从这冗长的沉睡中拯救出来。
问题似乎出在nu.studer身上。jooq插件,因为当使用另一个代码生成器时,反映主键表的H2数据库模型类接收可更新表扩展/实现。
我在插件上打开了一个问题,对于那些想关注它的人,你可以在插件github页面中查看打开的问题,上面已经链接了几行。
插件的新版本(版本3. x)似乎已经修复了这个问题。升级时要小心,因为插件配置中有许多重大更改,并且它还强制使用新的jOOQ版本(3.11)。
DSLContext。executeUpdate(R)
要求R是可更新记录(UpdateRecord)的子类型,这很有意义。只有“可更新”(即知道其主键)的记录才能有效更新。
似乎您的ExpressaoRecord不是一个可更新的记录,而只是一个表记录。这可能有几个原因:
<代码>
如果没有主键,代码生成器不会生成可更新的记录。
您可以将主键添加到表中,或者告诉代码生成器有关“合成主键”的信息:
https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-synthetic-primary-keys/
或者,您可以通过将任何唯一键视为主键来“覆盖”主键:
https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-override-primary-keys/
我有一个表,我想用另一个表中的值更新该表,我正在使用以下代码: 尽管事实上,表。id是tableA的主键,我不断得到以下错误: 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项- 我做错了什么?
问题内容: 我尝试通过bash脚本执行此命令,但出现以下错误: 错误stacktrace: {“错误”:“ IndexPrimaryShardNotAllocatedException [[my_index]主要未分配后api]”,“状态”:409} {“错误”:“ ElasticSearchIllegalArgumentException [无法更新非动态设置[[index.analysis.f
我在尝试更新我的Eclipse时出错! 以下是在“安装下载0”期间发生内部错误的错误日志 Java . lang . illegalargumentexception:比较法违反了它的通用契约!at Java . util . comparabletimsort . merge hi(comparabletimsort . Java:835)at Java . util . comparablet
我想使用POJO作为源来更新JOOQ记录中更改的字段<代码>记录。from(Object)几乎正确,但根据文档 结果记录的所有值的内部“更改”标志都将设置为true。 我只希望实际更改的字段(由对象决定。等于(对象,对象))更新其标志。 这有两个原因: 我不想触发插入
问题内容: 我有这个: 当我做一个我得到: 在probleme我有是附加在 有人可以帮忙吗,谢谢 问题答案: 尝试以下代码(已修复):
UPDATE IDConfig设置女性ID=女性ID 1; 获取错误,如您正在使用安全更新模式,并且您试图更新一个没有使用KEY列的WHERE的表要禁用安全模式,请在首选项中切换选项-