jooq-获取单个值

时间:2014-03-12 07:28:38

标签: java sql jooq

我有一个问题..为什么我重复了我在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());

所以我在select子句中提供了CON_CAL_INSTANCE.DATE.min(),为什么我必须在fetchOne(CON_CAL_INSTANCE.DATE.min())中重复它?

或者我不是这样做的吗?

1 个答案:

答案 0 :(得分:8)

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

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

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);

另请参阅Record1

使用更多LINQ风格的语法

在旁注中,过去曾讨论过在jOOQ API中使用更多LINQ风格的语法:

from Table
where Predicates
select Projection

一开始看起来好主意的是提出新问题:

  1. ORDER BYFOR UPDATE条款如何,仍应放在SELECT之后。 (DSLContext.fetchValue() Javadoc)。
  2. 设置操作如UNIONINTERSECTEXCEPT
  3. See this post for details

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