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

Java jOOQ-基于唯一键(非主键)更新记录,java,sql,jooq,Java,Sql,Jooq,我正在使用jOOQ为我的数据库表生成POJO。这很有效 我有一个带有主键(标识符)和唯一键(名称)的表。更新记录时,jOOQ使用主键 我想使用唯一键而不是主键来更新记录 @覆盖 公共最终int更新(){ 返回更新(fields.fields.fields); } @凌驾 公共int更新(字段…存储字段)引发DataAccessException、DataChangedException{ 返回storeUpdate(storeFields,getPrimaryKey().getFieldsAr

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

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

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

@覆盖
公共最终int更新(){
返回更新(fields.fields.fields);
}
@凌驾
公共int更新(字段…存储字段)引发DataAccessException、DataChangedException{
返回storeUpdate(storeFields,getPrimaryKey().getFieldsArray());
}
本质上,我想用另一个键(第二个参数)调用
storeUpdate
。我尝试扩展生成的记录,但
storeUpdate
是私有的


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

从注释中,我了解到您希望:

  • 将生成的记录用作“ActiveRecords”,保存将要存储/更新到表中的数据
  • 使用任意“键”信息作为update语句的选择条件
使用jOOQ有两种方法可以做到这一点:

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


我的\u唯一\u密钥\u名称
请注意,此解决方案将影响对
store()
update()
等的所有调用。根据您的评论,这可能不是所需的行为

2.使用常规UPDATE语句 您可以将整个
updateablerecord
传递给
UPDATE
语句,并明确指定选择条件,例如:

MyTableRecord=。。。;
DSL.使用(配置)
.update(我的表格)
.设置(记录)
.where(MY_TABLE.NAME.eq(record.getName())
.execute();

您希望使用唯一密钥而不是主键进行更新的原因是什么?您始终希望使用唯一密钥,还是仅使用一次(例如,在应用程序的一个位置)?我想在我的应用程序中的某些位置使用/some unique key。应用程序的最终用户可以基于名称而不是标识符来更新/删除/…记录。对于他/她,名称(或另一个unique key)没有“标识符”那么抽象,因此我希望允许基于名称的交互。在这些地方,我没有标识符(他/她正在填写表单)。谢谢,非常有用的反馈和功能。第二个选项是我需要的!
@Override
public final int update() {
    return update(fields.fields.fields);
}

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