【问题标题】:jooq- fetching a single valuejooq-获取单个值
【发布时间】:2014-04-16 04:25:42
【问题描述】:

我有一个问题.. 为什么我要重复我在 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_CAL_INSTANCE.DATE.min(),为什么我必须在fetchOne(CON_CAL_INSTANCE.DATE.min()) 中重复它?

还是我做的不对?

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    你做得对。 jOOQ DSL 使用 Java 泛型构造的方式,您的 ResultQuery<Record1<Date>>“知道” 它只选择一个值,即使 ResultQuery 使用 Record1 作为行类型.

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

    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

    使用更多 LINQ 风格的语法

    顺便说一句,过去曾讨论过在 jOOQ API 中使用更多 LINQ 风格的语法:

    from Table
    where Predicates
    select Projection
    

    一开始可能看起来不错的想法是提出新问题:

    1. ORDER BYFOR UPDATE 子句呢,它们仍应放在SELECT 之后。 (See this post for details)。
    2. 集合操作呢,例如UNIONINTERSECTEXCEPT

    I've also written about the difference between lexical and logical order of operations in SQL, here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-17
      • 2021-01-30
      • 1970-01-01
      • 2010-09-26
      • 2017-06-09
      • 1970-01-01
      • 2018-01-04
      • 2019-02-04
      相关资源
      最近更新 更多