Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jOOQ更新交叉引用表_Java_Sql_Jooq - Fatal编程技术网

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))