JOOQ:通过主键获取单行吗?

时间:2018-12-17 09:23:29

标签: java sql jooq

我有一个主键值,我想获取一条记录以进行更新,所以现在我写:

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 :(得分: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());