gpt4 book ai didi

mysql - JOOQ,忽略 INSERT 和 UPDATE 中的 created_date、last_modified_date 等列

转载 作者:行者123 更新时间:2023-12-05 05:46:55 25 4
gpt4 key购买 nike

使用mysql,可以创建一个像这样的列:

last_modified_date 时间戳默认 CURRENT_TIMESTAMP 在更新 CURRENT_TIMESTAMP 时不为空

所以在插入和更新的时候,我们不需要更新这一列。

想在 Jooq 中使用只读列:

          .withSyntheticObjects(new SyntheticObjectsType().withReadonlyColumns(
new SyntheticReadonlyColumnType().withTables("*.*").withFields("CREATED_DATE").withFields("LAST_MODIFIED_DATE")
))

生成的类有:

public final TableField<BookRecord, LocalDateTime> CREATED_DATE = createField(DSL.name("created_date"), SQLDataType.LOCALDATETIME(0).nullable(false), this, "");

尝试使用时

    BooksRecord rec = new BooksRecord();
rec.from(myPojo);
dslContext.batchUpdate([rec]).execute();

如果我们不设置 created_date,它会提示 created_date is null。修改日期相同。

使用此 SyntheticReadonlyColumnType 的正确方法是什么?我如何检查它是否工作?有没有办法全局忽略更新和插入 sql 生成中的那些列?

更新:好的,开源版本似乎不支持 SyntheticReadonlyColumnType:https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/readonly-columns

所以问题是在开源版本中实现这一目标的最佳方式是什么?每次更新前调用 Record.reset(Field)?

最佳答案

So the question will be what's the best way to achieve this in the open source edition?

最好的方法是使用内置的 readonly column support商业版,它处理很多警告和边缘情况,包括您手动编写的语句,而不仅仅是 CRUD UpdatableRecord.store() 调用。它还会为您添加到架构中的每个新计算列自动执行此操作。

call Record.reset(Field) everytime before doing update?

这显然是一个选项,但您每次与此记录类型交互时都必须记住它。

如果(目前)还不能升级,并且您的只读列用例仅限于 UpdatableRecord 调用 only,那么您可以使用RecordListener ,但是如果你这样写,那是行不通的:

dsl.update(BOOKS).set(rec).where(BOOKS.ID.eq(rec.getId())).execute();

out-of-the-box readonly column support也可以透明地为您修补该 SQL 查询。

关于mysql - JOOQ,忽略 INSERT 和 UPDATE 中的 created_date、last_modified_date 等列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71109567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com