我有表Users
,Factors
和交叉引用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检索我想要的行,然后更新该行?
答案 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();