Java 使用jOOQ更新交叉引用表
我有表Java 使用jOOQ更新交叉引用表,java,sql,jooq,Java,Sql,Jooq,我有表Users,Factors,以及交叉引用UserFactors 当我在交叉引用表上使用store()方法时,在如下设置两个ID之后: UserFactorsPOJO userFactors = new UserFactorsPOJO(); userFactors.setUserId(userId); userFactors.setFactorId(FactorId); userFactors.setValue(value); UserFactorsRecord userFactRec =
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并存储它。我得到一个“唯一索引或主键冲突”
”错误
如何使用这两个ID检索所需的行,然后更新该行?这是我能想到的最好方法。。欢迎提出其他建议
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();
如果您真的要为一个ID更新一个值,那么不应该在任务中使用jOOQ来避免发出两个查询。最简单的解决方案是:
create.update(USER_FACTORS)
.set(USER_FACTORS.VALUE, value)
.where(USER_FACTORS.FACTOR_ID.eq(factorId))
.execute();
请参阅手册中有关的章节。如果您计划进行更复杂的更新,也可以尝试使用,尽管在本例中,我认为您不需要
MERGE
这样做。。我想在我的例子中,我应该在where子句中为第二个外键添加第二个条件:.where(USER\u FACTORS.FACTOR\u ID.eq(factorId).和(UserFactors.USER\u FACTORS.USER\u ID.eq(userId))