[英]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.