当前位置: 首页 > 知识库问答 >
问题:

jOOQ-基于唯一键(非主键)更新记录

郑锦
2023-03-14

我正在使用jOOQ为我的数据库表生成POJO。这很有效。

我有一个带有主键(标识符)和唯一键(名称)的表。更新记录时,jOOQ使用主键。

我想通过使用唯一键而不是主键来更新记录。

https://github.com/jOOQ/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java

@Override
public final int update() {
    return update(fields.fields.fields);
}

@Override
public int update(Field<?>... storeFields) throws DataAccessException, DataChangedException {
    return storeUpdate(storeFields, getPrimaryKey().getFieldsArray());
}

本质上,我想用另一个键(第二个参数)调用store Update。我尝试扩展生成的记录,但是store Update是私有的。

还有其他方法更新记录吗?我可以先选择update()之前的标识符,但它会引入一个额外的查询,我希望避免这种情况。

共有1个答案

左丘繁
2023-03-14

从评论中,我了解到您想要:

  • 将生成的记录用作“活动记录”,保存将要存储/更新到表中的数据

使用jOOQ有两种方法:

您可以在数据库中指定与唯一键名匹配的正则表达式,该表达式应覆盖生成代码中的主键:

xml prettyprint-override">  <!-- All (UNIQUE) key names that should be used instead of primary keys on
       generated UpdatableRecords, to be used with

        - UpdatableRecord.store()
        - UpdatableRecord.update()
        - UpdatableRecord.delete()
        - UpdatableRecord.refresh()

        If several keys match, a warning is emitted and the first one encountered 
        will be used.

        This flag will also replace synthetic primary keys, if it matches. -->
  <overridePrimaryKeys>MY_UNIQUE_KEY_NAME</overridePrimaryKeys>

请注意,此解决方案将影响对store()update()等的所有调用。根据您的评论,这可能不是所需的行为。。。有关更多信息,请参阅jOOQ手册

您可以将整个Up数据库记录传递给UPDATE语句,并显式指定选择条件,例如:

MyTableRecord record = ...;
DSL.using(configuration)
   .update(MY_TABLE)
   .set(record)
   .where(MY_TABLE.NAME.eq(record.getName())
   .execute();
 类似资料:
  • 本文向大家介绍主键与唯一键,包括了主键与唯一键的使用技巧和注意事项,需要的朋友参考一下 首要的关键 主键是一列,用于唯一地标识表的每个元组。 它用于向表添加完整性约束。一个表中只能使用一个主键。在主键的情况下,重复和NULL(空)值无效。主键也可以用作其他表的外键。 让我们举个例子 我们有一个表名employee,用于存储公司员工的数据。下表显示了该表的内容。 Emp_id 名称 号码 位置 薪水

  • 一开始我尝试过,如下所示,但仍然没有结果: 将两个外键定义为实体框架中的主键 实体框架两个外键作为主键 这是我的实体: 我正在尝试基于两个外键创建主键。有一个错误 EntityType“Passage”未定义键。定义此EntityType的键。 我做错了什么?

  • 所以我的数据库里有这个表。我们将其称为。 我有这个CSV文件:

  • 我有一个包含数据的表,其中一个行需要存在于另一个表中。所以,我想要一个外键来保持引用的完整性。 但是,正如您所看到的,我的外键所指向的表,列不是PK。有没有一种方法来创建这个外键,或者可能有一种更好的方法来维护这个引用完整性?

  • 我有两张这样结构的桌子。 表: 1) Obj表- 2) subobj表 我的场景是我有is_deleted列,在delete上我不想删除记录,而是想将is_deleted设置为true并更新所需的依赖项 详细场景: 1)考虑,用户正在从具有Id1.nowsubobj表中删除与obj_id1关联的行的obj表中删除一行,应该将is_deleted设置为true。 2) 子对象表包含自引用fk“父对象