使用jOOQ更新交叉引用表

时间:2014-01-02 13:15:40

标签: java sql jooq

我有表UsersFactors和交叉引用UserFactors

当我在交叉引用表上使用store()方法时,在设置这两个ID之后:

UserFactorsPOJO userFactors = new UserFactorsPOJO();
userFactors.setUserId(userId);
userFactors.setFactorId(FactorId);
userFactors.setValue(value);
UserFactorsRecord userFactRec = create.newRecord(UserFactors.USER_FACTORS, userFactors);
userFactRec.store();

Jooq尝试插入记录,显然是因为我将ID设置为POJO并存储它。我收到“Unique index or primary key violation”错误。

如何使用两个ID检索我想要的行,然后更新该行?

2 个答案:

答案 0 :(得分:2)

如果您确实为单个ID更新了单个值,则不应使用jOOQ的UpdatableRecord来完成该任务,以避免发出两个查询。最简单的解决方案是:

create.update(USER_FACTORS)
      .set(USER_FACTORS.VALUE, value)
      .where(USER_FACTORS.FACTOR_ID.eq(factorId))
      .execute();

请参阅手册中有关the UPDATE statement的部分。如果您计划进行更复杂的更新,也可以尝试使用jOOQ's MERGE statement support,尽管在此示例中,我认为您不需要MERGE

答案 1 :(得分:1)

这是我能想到的最好的结果..欢迎提出其他建议。

    UserFactorsRecord userFactRec = create.fetchOne(UserFactors.USER_FACTORS, 
            UserFactors.USER_FACTORS.FACTOR_ID.eq(factorId).and(UserFactors.USER_FACTORS.USER_ID.eq(userId)));
    userFactRec.setValue(value);
    userFactRec.store();