проблема здесь с jooq
заключается в том, что он не поддерживает join
и updates
, более того, обновляет несколько таблиц.
Я нахожу способ преобразовать этот запрос:
String query = "UPDATE knowCRM.customer_did cd ";
query += " LEFT JOIN knowCRM.know_service ks";
query += " ON ks.id = cd.customer_service_id";
query += " LEFT JOIN knowCRM.customer_flags cf";
query += " ON ks.service_owner_id = cf.account_number";
query += " SET cd.is_cli_number= 1, cf.is_cli_number = '0'";
query += " WHERE ks.service_owner_id = " + accountNumber;
query += " AND cd.did_number= " + cliNumber;
в эти два:
int count2 = wrapper.getCreate().update(CUSTOMER_DID)
.set(CUSTOMER_DID.IS_CLI_NUMBER, Byte.parseByte("1"))
.where(CUSTOMER_DID.CUSTOMER_SERVICE_ID.equal(
wrapper.getCreate().select(KNOW_SERVICE.ID)
.from(CUSTOMER_FLAGS, KNOW_SERVICE)
.where(KNOW_SERVICE.ID.equal(CUSTOMER_DID.CUSTOMER_SERVICE_ID))
.and(KNOW_SERVICE.SERVICE_OWNER_ID.equal(CUSTOMER_FLAGS.ACCOUNT_NUMBER))
.and(KNOW_SERVICE.SERVICE_OWNER_ID.equal(accountNumber))
.and(CUSTOMER_DID.DID_NUMBER.equal(cliNumber))
))
.execute();
и
int count3 = wrapper.getCreate().update(CUSTOMER_FLAGS)
.set(CUSTOMER_FLAGS.IS_CLI_NUMBER, Byte.parseByte("0"))
.where(CUSTOMER_FLAGS.ACCOUNT_NUMBER.equal(
wrapper.getCreate().select(KNOW_SERVICE.SERVICE_OWNER_ID)
.from(CUSTOMER_DID, KNOW_SERVICE)
.where(KNOW_SERVICE.ID.equal(CUSTOMER_DID.CUSTOMER_SERVICE_ID))
.and(KNOW_SERVICE.SERVICE_OWNER_ID.equal(CUSTOMER_FLAGS.ACCOUNT_NUMBER))
.and(KNOW_SERVICE.SERVICE_OWNER_ID.equal(accountNumber))
.and(CUSTOMER_DID.DID_NUMBER.equal(cliNumber))
))
.execute();
Мне нужен более умный способ рефакторинга этого запроса с помощью jooq
без необходимости разбивать его на два массивных запроса.