現在、レコードを使用してアップストール(3.10スナップショットを使用)を実行しようとしていますが、addRecord(R)
を使用したときに更新のset
データがクエリに追加されていません。私が持っているDAOで:programAssignmentsのためのクラスの内部PostgreSQL Upsertでレコードを使用する
try (Connection writeConn = DatabaseManager.getConnection(true);
final DSLContext writeContext = DatabaseManager.getBuilder(writeConn);
InsertQuery<UserProgramAssignmentsRecord> programAssignmentsUpdateQuery = writeContext
.insertQuery(AccessControlWriteDAO.userProgramAssignments)) {
programAssignmentsUpdateQuery.onDuplicateKeyUpdate(true);
programAssignments.forEach(pa -> programAssignmentsUpdateQuery.addRecord(pa.toRecord()));
if (!programAssignments.isEmpty()) {
if (AccessControlWriteDAO.logger.isInfoEnabled()) {
AccessControlWriteDAO.logger.info(writeContext.renderInlined(programAssignmentsUpdateQuery));
}
// programAssignmentsUpdateQuery.execute();
}
} catch (final SQLException e) {
throw new DAOException(e.getMessage(), e);
}
、私が持っている:
/**
* <p>
* This method turns the object into a {@link Record} that can then be attached to a {@link Connection} and
* {@link DSLContext}.
* </p>
*
* @return A usable {@link UserProgramAssignmentsRecord}
*/
public UserProgramAssignmentsRecord toRecord() {
UserProgramAssignmentsRecord upar = new UserProgramAssignmentsRecord();
getAdministerProgram().ifPresent(upar::setAdminister);
getCreateProjects().ifPresent(upar::setCreateProjects);
getJustification().ifPresent(upar::setJustification);
getProgramId().ifPresent(upar::setProgramId);
getUserId().ifPresent(upar::setUserId);
getViewRevisions().ifPresent(upar::setViewRevisions);
return upar;
}
をコードは、次のクエリを生成します。
insert into "%%removed%%"."user_project_assignments" (
"project_id",
"edit_draft",
"justification",
"user_id"
)
values (
98332,
true,
'The user created the project',
675
)
on conflict (
"project_id",
"user_id"
) do update
set [ no fields are updated ]
は私がに切り替えてください。 addValue(Field<T>,T)
、addValueForUpdateField(Field<T>,T)
を使用して、そしてNewRecordと?私はがレコードを渡すと同等になることを思っただろうが、それは - または - 私は私のtoRecord()
方法で何か間違ったことをやって更新するために、フィールドを設定していないようaddRecord(R)
としてケースのように思えないのですか? InsertQuery
オブジェクトに対するaddRecordForUpdate(R)
のいくつかの種類がありますか?そして、これは複数行のアップセル(これは私がやろうとしていることです)でどれくらい効果がありますか? 1はaddRecord(R)
+ onDuplicateKeyUpdate(true)
があるだろうと、更新データがまたはに設定されていることを意味するであろうことをと思うかもしれませんが