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())重复它?

或者我不是这样做的吗?

你做得对。 使用Javagenerics构建jOOQ DSL的方式,即使ResultQuery使用Record1作为行类型, ResultQuery>也不会“知道”它只选择单个值。

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

 ResultQuery> 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之后放置。 ( 详情请参阅此帖 )。
  2. 如何设置操作,如UNIONINTERSECTEXCEPT

我还在这里写了关于SQL中词法和逻辑运算顺序之间的区别

这些开放性问题使我们坚持使用标准的SQL语法。