使用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_日期,它会抱怨created_日期为空。修改日期相同。
使用这个SyntheticReadonlyColumnType的正确方法是什么?如何检查它是否工作?有没有办法在更新和插入sql生成中全局忽略这些列?
更新:好的,开源版本似乎不支持SyntheticReadonlyColnType:https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/readonly-columns
所以问题是,在开源版本中实现这一点的最佳方式是什么?通话记录。每次更新前都重置(字段)?
所以问题是,在开源版本中实现这一点的最佳方式是什么?
最好的方法是使用商业版的内置只读列支持,它处理许多警告和边缘情况,包括您手动编写的语句,而不仅仅是CRUDUpdatleRecord.store()
调用。它还会为您添加到架构中的每个新计算列自动执行此操作。
通话记录。每次更新前都重置(字段)?
这显然是一种选择,但每次与这种记录类型交互时,你都必须记住它。
如果升级还不是一个选项,并且您的只读列用例仅限于可更新记录调用,那么您可以使用记录监听器实现类似的功能,但如果您编写:
dsl.update(BOOKS).set(rec).where(BOOKS.ID.eq(rec.getId())).execute();
现成的只读列支持也可以透明地为您修补SQL查询。
问题内容: 似乎和我做同样的事情。 在任何情况下我都应该使用代替,反之亦然? 问题答案: 在CRUD操作中,“ 是”和“ U”。它们是持久性存储的四个基本功能中的两个。另外两个是和。如果没有至少这四个操作,则不能认为典型的数据库系统是完整的。 使用插入一个新的记录。 使用更新现有的记录。
JOOQ似乎完全忽略了数据库列的默认值。既不会更新ActiveRecord对象,也不会在插入时跳过此列。相反,它尝试将其设置为NULL,这在非NULL列上失败。 例: 我所期望的行为是,要么new记录()用korrekt值初始化所有默认变量(尽管我知道如果结果是自定义函数的结果,这可能很困难:-))。或者INSERT INTO不插入所有带有默认值的未修改列,然后INSERT INTO后面跟着一个S
问题内容: 在执行包含多行的语句时,我想跳过重复的条目,否则它们会导致失败。经过研究后,我的选择似乎是使用以下任一方法: 这意味着要付出一定代价进行不必要的更新,或者 这暗示了其他类型的失败的邀请。 这些假设对吗?跳过可能导致重复的行并继续其他行的最佳方法是什么? 问题答案: 我建议使用。 如果使用,那么如果该行导致重复键,则实际上不会插入该行。但是该语句不会产生错误。而是生成警告。这些情况包括:
问题内容: 我正在使用MySQL GUI,通过选择某些表并将从备份转储生成的语句运行到空表(新模式)中,以将某些站点迁移到CMS的新版本。旧表中有几列在新表中不存在,因此脚本会因以下错误而停止: 脚本行:1个“字段列表”中的未知列“ user_id” 挑选要导出的所需列,或编辑转储文件将非常乏味且耗时。要解决此问题,我将在生成错误时创建未使用的列,通过运行查询导入数据,然后在处理完该表后删除未使用
问题内容: 现在已经在网上浏览了一段时间,似乎看不到任何与我想要的东西类似的东西。我知道这与我编写查询的方式有关,但是任何帮助将不胜感激。 我正在尝试做的基础知识是: 如果表中不存在,则将其插入表中 更新项目(如果存在) 它以以下格式存在: 名称,条形码,物品,数量,位置,价格和日期 名称-可以在多行条形码中使用-用于特定项目,但可以用作多个位置项目-与条形码相同,但包含名称数量-自我说明的位置-
问题内容: 这个问题已经在这里有了答案 : 如果存在使用VB.net更新其他插入(SQL参数化查询) (3个答案) 7年前关闭。 我有以下查询: 我需要查看表中是否有任何记录,是否有更新而不是其他插入。如何实现? 问题答案: 您可以在SQL中使用Exists函数。例如 这应该够了吧