spring-integration - jpa入站通道适配器输出问题
问题描述
@Bean
public JpaPollingChannelAdapter reimStgResponseJpaInboundAdapter() {
return Jpa
.inboundAdapter(entityManager)
.nativeQuery(responseQueryString)
//.expectSingleResult(true)
.get();
}
@Bean
public IntegrationFlow reimFeedbackHandle() {
return IntegrationFlows
.from("reimFeedbackChannel")
.handle(msg -> {
try {
dctmHandler.handleReIMFeedback(msg);
} catch (Exception e) {
e.printStackTrace();
}})
.get();
}
.expectSingleResult(true)
预期 1 个结果的返回异常。
本机查询是String responseQueryString = "select * from RMS16DEV.TSC_IM_DOC_HEAD_TEMP where error_ind is not null"
;
来自入站适配器的消息是一个数组列表,我无法将其转换为正确的实体。jpa 入站适配器返回到通道的类型是什么?
public void handleReIMFeedback(Message<?> reimStgRowMsg) throws Exception {
List<TSC_IM_DOC_HEAD_TEMP> list = (List<TSC_IM_DOC_HEAD_TEMP>) reimStgRowMsg.getPayload();
System.out.println( (list.get(0)));
}
给我:
java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class java.util.List ([Ljava.lang.Object; and java.util.List are in module java.base of loader 'bootstrap')
at tesco.finance.gss.dctmreim.jpa.handlers.DctmHandlers.handleReIMFeedback(DctmHandlers.java:28)
`
解决方案
下面的代码解决了这个问题:
@Bean
public JpaPollingChannelAdapter reimStgResponseJpaInboundAdapter() {
return Jpa
.inboundAdapter(entityManager)
.nativeQuery(responseQueryString)
.expectSingleResult(true)
.entityClass(TSC_IM_DOC_HEAD_TEMP.class)
.get();
}
推荐阅读
- javascript - React 等待来自 API 的特定响应
- java - Android中的日期格式问题
- xml - 在 XSLT 1.0 中使用 document() 时防止 xml 缓存
- objective-c - 是否有使用#selector 的 UIApplication.didBecomeActiveNotification 的替代方法?
- java - 使用 Java Hibernate 和 JPA 建模友谊的最佳方法是什么
- javascript - JavaScript - 如何在变量中存储和使用函数的返回值
- javascript - "res.end" 不是 "res.on('end', () =>" (express.js) 中的函数
- java - 如何在 TextView 中反复更改点击单词的颜色 - Android Studio?
- webpack - 在监视模式和 Firebase 模拟器中使用 Webpack 时如何启用热重载:开始
- tensorflow - (TensorFlowLite Model Maker) ValueError: Expect x to be an non-empty array or dataset (Colab)