Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将fetchMap()与RecordMapper一起使用?_Java_Sql_Jooq - Fatal编程技术网

Java 如何将fetchMap()与RecordMapper一起使用?

Java 如何将fetchMap()与RecordMapper一起使用?,java,sql,jooq,Java,Sql,Jooq,我知道我可以拿一张这样的地图: this.ctx.select( shopSubscription.field(SHOP_SUBSCRIPTION.SHOP_ID), shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID), shopSubscription.field(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID

我知道我可以拿一张这样的地图:

this.ctx.select(
        shopSubscription.field(SHOP_SUBSCRIPTION.SHOP_ID),
        shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
        shopSubscription.field(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID),
        PAYMENT_GATEWAY_SUBSCRIPTION.SUBSCRIPTION_ID_TOKEN
        )
    .from(PAYMENT_GATEWAY_SUBSCRIPTION)
        .join(shopSubscription)
            .on(PAYMENT_GATEWAY_SUBSCRIPTION.ID.eq(shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID))
                    .and(PAYMENT_GATEWAY_SUBSCRIPTION.PAYMENT_GATEWAY_TYPE_ID.eq(paymentGatewayType)))

        // For each record apply the map() function

        .map(new RecordMapper<Record<?>, ShopSubscriptionDTO>() {
            @Override
            public ShopSubscriptionDTO map(Record<?> record) {
                ShopSubscriptionDTO shopSubscriptionDto = new ShopSubscriptionDTO();

                shopSubscriptionDto.setShopId(record.getValue(SHOP_SUBSCRIPTION.SHOP_ID)
                // ...

                return shopSubscriptionDto;
            }
        });

        // Fetch the result into a map where the key is SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID
        .fetchMap(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID);
this.ctx.select(
shopSubscription.field(SHOP\u SUBSCRIPTION.SHOP\u ID),
shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
shopSubscription.field(SHOP\u SUBSCRIPTION.ADMIN\u TOOL\u FEATURE\u TYPE\u ID),
支付\网关\订阅。订阅\标识\令牌
)
.发件人(支付\网关\订阅)
.加入(网上订购)
.on(支付网关订阅.ID.eq(shopSubscription.field(商店订阅.支付网关订阅.ID))
.和(支付\网关\订阅。支付\网关\类型\ ID.eq(支付网关类型)))
.fetchMap(付款\网关\订阅.付款\网关\类型\ ID,ShopSubscriptionDTO.class);
但是,为了在编译时检测问题,我更愿意在这个查询中添加一个
RecordMapper

那么,有没有一种方法既可以调用
fetchMap()
,又可以提供
记录映射器

我想的是这样的:

this.ctx.select(
        shopSubscription.field(SHOP_SUBSCRIPTION.SHOP_ID),
        shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
        shopSubscription.field(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID),
        PAYMENT_GATEWAY_SUBSCRIPTION.SUBSCRIPTION_ID_TOKEN
        )
    .from(PAYMENT_GATEWAY_SUBSCRIPTION)
        .join(shopSubscription)
            .on(PAYMENT_GATEWAY_SUBSCRIPTION.ID.eq(shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID))
                    .and(PAYMENT_GATEWAY_SUBSCRIPTION.PAYMENT_GATEWAY_TYPE_ID.eq(paymentGatewayType)))

        // For each record apply the map() function

        .map(new RecordMapper<Record<?>, ShopSubscriptionDTO>() {
            @Override
            public ShopSubscriptionDTO map(Record<?> record) {
                ShopSubscriptionDTO shopSubscriptionDto = new ShopSubscriptionDTO();

                shopSubscriptionDto.setShopId(record.getValue(SHOP_SUBSCRIPTION.SHOP_ID)
                // ...

                return shopSubscriptionDto;
            }
        });

        // Fetch the result into a map where the key is SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID
        .fetchMap(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID);
this.ctx.select(
shopSubscription.field(SHOP\u SUBSCRIPTION.SHOP\u ID),
shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
shopSubscription.field(SHOP\u SUBSCRIPTION.ADMIN\u TOOL\u FEATURE\u TYPE\u ID),
支付\网关\订阅。订阅\标识\令牌
)
.发件人(支付\网关\订阅)
.加入(网上订购)
.on(支付网关订阅.ID.eq(shopSubscription.field(商店订阅.支付网关订阅.ID))
.和(支付\网关\订阅。支付\网关\类型\ ID.eq(支付网关类型)))
//对每个记录应用map()函数

.map(new RecordMapper因为有很多不同的
fetchMap()
实现,我没有看到有
fetchMap(Field,RecordMapper),因为有很多不同的
fetchMap()
实现,我没有看到
fetchMap(Field,RecordMapperjava 8或更高版本

.fetchMap(CN_TASKS.AGENTID,
                        r -> new CnTaskMessage(r.getValue(CN_TASKS.CN_TASKID), r.getValue(CN_TASKS.TASK_TYPE),
                                r.getValue(CN_TASKS.STATUS)));
java 8或更高版本

.fetchMap(CN_TASKS.AGENTID,
                        r -> new CnTaskMessage(r.getValue(CN_TASKS.CN_TASKID), r.getValue(CN_TASKS.TASK_TYPE),
                                r.getValue(CN_TASKS.STATUS)));

fetchMap()
重载,这些重载接受
RecordMapper
参数,例如,但我不确定这是否是您要查找的参数。您希望如何处理它们?@LukasEder我正在寻找的是一种方法,可以为生成的
HashMap
的所有值实现
RecordMapper
,以便将所选数据转换为业务s对象。对不起,我仍然不太清楚这意味着什么。你可以用预期的代码/类型等更新你的问题吗?@LukasEder当然:)我添加了一个我认为可能是这样的示例-我希望这有意义^^^啊,好的,我明白了。那么,请随意回答你自己的问题:)有
fetchMap()
重载,这些重载接受
RecordMapper
参数,例如,但我不确定这是否是您要查找的参数。您希望如何处理它们?@LukasEder我正在寻找的是一种方法,可以为生成的
HashMap
的所有值实现
RecordMapper
,以便将所选数据转换为业务s对象。对不起,我仍然不太清楚这意味着什么。您是否可以使用预期的代码/类型等更新您的问题?@LukasEder当然:)我添加了一个我认为可能是这样的示例-我希望这有意义^^^啊,好的,我明白了。那么,请随意回答您自己的问题:)