简体   繁体   English

JOOQ selectQuery for Record5

[英]JOOQ selectQuery for Record5

I'm new to JOOQ.我是 JOOQ 的新手。

And I need to use SelectQuery and return Result, but return type of it is Record.我需要使用 SelectQuery 并返回 Result,但它的返回类型是 Record。 Is it possible to use selectQuery with Record5?是否可以将 selectQuery 与 Record5 一起使用? Or is there another solution?或者还有其他解决方案吗?

    SelectQuery<Record> query = db.selectQuery();
    query.addSelect(WARE.NAME, RECEIPTITEM.SALEPRICE, RECEIPTITEM.QUANTITY, RECEIPT.TSCCREATED, WARE.WARECATEGORYID);
    query.addFrom(RECEIPT
            .join(RECEIPTITEM).on(RECEIPT.ID.eq(RECEIPTITEM.RECEIPTID))
            .join(OUTLET).on(OUTLET.ID.eq(RECEIPT.OUTLETID))
            .join(WARE).on(WARE.ID.eq(RECEIPTITEM.WAREID)));
    query.addConditions(RECEIPT.TSCCREATED.between(start, end)
            .and(OUTLET.OWNERID.eq(ownerId)));
    if (outletId != null) {
        query.addConditions(RECEIPT.OUTLETID.eq(outletId));
    }
    if (merchantId != null) {
        query.addConditions(RECEIPT.MERCHID.eq(merchantId));
    }

You cannot create a SelectQuery<Record5<...>> type with jOOQ.您不能使用SelectQuery<Record5<...>>创建SelectQuery<Record5<...>>类型。

The reason for this is the fact that SelectQuery ( which is part of the model API ) allows you to keep adding new columns to it via SelectQuery.addSelect() (which you've done yourself).这样做的原因是SelectQuery它是模型 API 的一部分)允许您通过SelectQuery.addSelect() (您自己完成)不断向其中添加新列。 Each such call would invalidate the Record5<...> type.每个这样的调用都会使Record5<...>类型无效。

However, you don't have to use the model API to construct dynamic SQL, if the dynamic parts are only additional conditions.但是,如果动态部分只是附加条件,则不必使用模型 API 来构建动态 SQL。 You can rewrite your query like this:您可以像这样重写查询:

Condition condition = RECEIPT.TSCCREATED.between(start, end)
    .and(OUTLET.OWNERID.eq(ownerId));

if (outletId != null) {
    condition = condition.and(RECEIPT.OUTLETID.eq(outletId));
}
if (merchantId != null) {
    condition = condition.and(RECEIPT.MERCHID.eq(merchantId));
}

Select<Record5<String, BigDecimal, Integer, Timestamp, Long>> select =
db.select(
       WARE.NAME, 
       RECEIPTITEM.SALEPRICE, 
       RECEIPTITEM.QUANTITY, 
       RECEIPT.TSCCREATED, 
       WARE.WARECATEGORYID)
  .from(RECEIPT
      .join(RECEIPTITEM).on(RECEIPT.ID.eq(RECEIPTITEM.RECEIPTID))
      .join(OUTLET).on(OUTLET.ID.eq(RECEIPT.OUTLETID))
      .join(WARE).on(WARE.ID.eq(RECEIPTITEM.WAREID)))
  .where(condition);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM