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

jooq-获取单个值

柳晔
2023-03-14

我有一个问题..为什么要重复我在fetch方法中选择的内容。

Date minDate = getDSLContext()
    .select(CON_CAL_INSTANCE.DATE.min())
    .from(CON_CAL_INSTANCE)
    .join(CON_CAL_TEMPLATES)
    .on(CON_CAL_INSTANCE.TEMPLATE_ID.eq(CON_CAL_TEMPLATES.ID))
    .where(CON_CAL_TEMPLATES.ENTRY_TYPE.in("REPT", "HRPT"))
    .fetchOne(CON_CAL_INSTANCE.DATE.min());

所以我提供了CON\u CAL\u INSTANCE.DATE。min()在我的select子句中,为什么我必须在fetchOne(CON\u CAL\u INSTANCE.DATE.min())中重复它?

还是我做得不对?

共有1个答案

曾飞沉
2023-03-14

你做得对。jOOQ DSL是用Java泛型构造的,您的结果查询

除了重复该列,您还有其他一些选择:

ResultQuery<Record1<Date>> query = // ...

// Use two method calls (this may result in a NullPointerException!
// as fetchOne() may return null):
Date date1 = query.fetchOne().value1();

// Use fetchValue():
Date date2 = getDSLContext().fetchValue(query);

另请参见DSLContext.fetchValue()Javadoc。

另一方面,过去曾讨论过在jOOQ API中使用更LINQ风格的语法:

from Table
where Predicates
select Projection

起初看起来是个好主意的东西正在引发新的问题:

  1. 关于更新的ORDER BY(排序依据)子句,它仍然应该放在SELECT(选择)之后。(详见本文)
  2. 那么集合运算呢,比如并集、相交和除外

在这里,我还介绍了SQL中操作的词法顺序和逻辑顺序之间的差异

这些未解决的问题使我们坚持使用标准SQL语法。

 类似资料:
  • 我有一个主键值,我想获取一个记录以进行更新,所以现在我写: JOOQ知道我的表的主键(例如,它会生成onKey()方法等)-因此我希望得到如下结果: 但这似乎不是一件事。有没有更简洁的方法使用JOOQ API来做我想要的事情?

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

  • 在Postgres中,我创建了一个UDT,如下所示 注意:我知道JOOQ在生成类时会生成枚举类型,但这是获取所需信息的唯一方法吗? 谢了!

  • 通过 id 获取 device 信息 参数说明 字段 类型 必须? 说明 deviceId String 是 设备Id 接口定义 Swift: let device = RokidMobileSDK.device.getDevice(deviceId: String) -> RKDevice? Objc: RKDevice * device = [RokidMobileSDK.device ge

  • 我知道,要获取地图,我可以使用fetchMap,但它不支持LinkedHashMap,我想保持由orderBy创建的插入顺序。 我试过了 但是字段1和字段2部分给了我以下错误。 无法解析“T”中的方法“field1” 希望有人能帮我~ 谢谢 解决方案: 基于@Lukas的回答,我尝试了几次,发现必须做到以下几点: > 在方法中,所有字段都必须有一个类型,除了那些计算的,其中添加类型会抛出在字段列表

  • 我一直在使用模式。方法来获取模式中的表列表,但今天我发现该方法返回的是执行jOOQ代码生成时存在的表列表,而不是此时存在的表。 我的具体用例是随着时间的推移创建表(自动分区),我们的Java服务对它们执行一些操作。 在jOOQ中有没有办法从DB中获取当前的表列表? 我可以求助于查询信息模式。直接使用表,但我更愿意重用来自jOOQ的方法(如果可用的话)。