当前位置: 首页 > 知识库问答 >
问题:

JOOQ:按主键获取单行?

白昊东
2023-03-14

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

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

JOOQ知道我的表的主键(例如,它会生成onKey()方法等)-因此我希望得到如下结果:

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

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

共有1个答案

邵俊才
2023-03-14

您可以使用DSLContext。fetchSingle(表,条件):

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

生成的账户引用没有对键类型的类型引用,因此您建议的语法是不可能的。当然,您可以扩展代码生成器以生成一个方法,该方法采用主键值并生成一个条件:

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());
 类似资料:
  • 我有三张桌子: 用户键表具有来自用户和键表的主键,以建立用户和键之间的关系。 如何使用所有相关键获取用户? 如果存在其他表(例如,UserRoles)等,该怎么办?通常,如何获取用户和所有通过外键表相关的相关行?

  • 我有一个问题..为什么要重复我在fetch方法中选择的内容。 所以我提供了CON\u CAL\u INSTANCE.DATE。min()在我的select子句中,为什么我必须在fetchOne(CON\u CAL\u INSTANCE.DATE.min())中重复它? 还是我做得不对?

  • Hazelcast数据存储 如何通过传递any键获取值(John)。。 在Hazelcast这可能吗...?

  • 你不知道如何在JOOQ(Java)中创建主键吗?我需要的只是得到正确的创建表字符串。我还没有这段代码(使用SQLDialect。MYSQL): 输出(来自字符串生成器): 我需要的是设置主键以获得正确的输出: 不使用execute()是否可能?因为我只需要它作为字符串,所以我想再次使用only getSQL()命令。。。 我发现了类似这样的东西:DSL。主密钥(“id”); 但我无法将它与rest

  • 是否有一种方法可以编程地列出所有在Jooq中作为外键的字段?它为外键生成了很多静态常量,但没有很好的方法以编程方式访问这些常量。 例如,我有一个表,其中有一个外键字段。在jOOQ中,假设我对的表对象有一个引用,那么似乎没有方法以编程方式获取对jOOQ字段对象的引用。因此,我现在唯一的解决方案是使用文字地图DataStructure在某个地方手动生成这些映射。似乎jooq可以为我做到这一点,我是不是

  • 问题内容: 我正在尝试从ResultSet获取表的主键列。以下是步骤 我跟着: 这是有趣的部分。 现在,如果我观看此变量“ rsmd ”,它将显示相关列名的主键标志,但我无法访问它或将其放入任何变量。 我需要同样的帮助。 注意:我不想使用DatabaseMetadata及其getPrimaryKeys()函数,因为它将对外部数据库产生额外的影响。另外,ResultSetMetadata对象已经具有