JOOQ:按主键获取单行?

问题描述 投票:2回答:1

我有一个主键值,我想获取更新记录,所以目前我写:

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

JOOQ知道我的表的主键(这样它生成onKey()方法等) - 所以我希望有类似的东西:

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

但这似乎不是一件好事。有没有更简洁的方式使用JOOQ API来做我想要的?

java sql jooq
1个回答
2
投票

你可以使用DSLContext.fetchSingle(Table, Condition)

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

生成的ACCOUNT引用没有对键类型的类型引用,因此您建议的语法是不可能的。您当然可以使用extend the code generator生成一个获取主键值并生成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());
© www.soinside.com 2019 - 2024. All rights reserved.