JOOQ: получить одну строку по первичному ключу? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть значение первичного ключа, и я хочу получить запись для обновления, поэтому в данный момент я пишу:

AccountRecord account = db.selectFrom(ACCOUNT).
  where(ACCOUNT.ID.eq(identity.getAccountId())).fetchSingle();

JOOQ знает о первичных ключах моих таблиц (таких, что он генерирует onKey() методы и т. Д.) - поэтому я надеялся на что-то вроде:

AccountRecord account = db.fetchByKey(ACCOUNT, identity.getAccountId())

Но это не похоже на вещь.Есть ли более краткий способ использования JOOQ API для того, что я хочу?

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете использовать DSLContext.fetchSingle(Table, Condition):

AccountRecord account = db.fetchSingle(ACCOUNT, ACCOUNT.ID.eq(identity.getAccountId()));

Сгенерированная ссылка ACCOUNT не имеет ссылки на тип ключа, поэтому предложенный вами синтаксис невозможен,Конечно, вы могли бы расширить генератор кода , чтобы создать метод, который принимает значение первичного ключа и производит Condition:

class Account {
    ..
    public Condition byKey(Long accountId) {
        return ID.eq(accountId);
    }
    public AccountRecord fetchByKey(DSLContext ctx, Long accountId) {
        return ctx.fetchSingle(this, byKey(accountId));
    }
}

А теперь используйте выше:

AccountRecord account = ACCOUNT.fetchByKey(db, identity.getAccountId());
...