[英]Error: No converter found capable of converting from type JPA Model type to Custom object [Model]
public class Payload {
private Clob paylaod;
public Clob getPaylaod() {
return paylaod;
}
public void setPaylaod(Clob paylaod) {
this.paylaod = paylaod;
}
}
@Entity
@Table(name ="ORDER")
@Data
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Model implements Serializable {
@Id
@Column(name = "REQUEST_ID", nullable = false, unique = true)
private String requestId;
@Column(name = "VERSION")
private BigDecimal version;
@Column(name = "SOURCE")
private String source;
@Column(name = "SOURCE_ID")
private String sourceId;
@Lob
@Column(name = "PAYLOAD")
private Clob payload;
}
3.這是我的資料庫。
public interface OrderRepository extends JpaRepository<Model, String>
{
@Query(value="SELECT PAYLOAD FROM ORDER WHERE REQUEST_ID = ?",nativeQuery = true)
Payload getDetailsById(String requestId);
}
@RestController
@RequestMapping("/v1/order-data/Order")
public class OrderController {
@Autowired
OrderRepository repository;
@GetMapping("/getDetailsById/{requestId}")
public Payload getDetailsById(@PathVariable("requestId") String id) {
return repository.getDetailsById(id);
}
}
4.報錯:
** org.springframework.core.convert.ConverterNotFoundException:找不到能夠從類型 [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] 轉換為類型 [model.Payload] at org.springframework 的轉換器.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:322) ~[spring-core-5.3.10.jar:5.3.10] 在org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.8821582869: 195) ~[spring-core-5.3.10.jar:5.3.10] 在 org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:175) ~[spring-core-5.3.10.jar:5.3.10 ] 在 org.springframework.data.repository.query.ResultProcessor$ProjectingConverter.convert(ResultProcessor.java:313) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework.data.repository.query .ResultProcessor$查 iningConverter.lambda$and$0(ResultProcessor.java:229) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework.data.repository.query.ResultProcessor$ChainingConverter.convert(ResultProcessor.8821328:94588 240) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework.data.repository.query.ResultProcessor.processResult(ResultProcessor.java:170) ~[spring-data-commons-2.4.13.jar :2.4.13] 在 org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:158) ~[spring-data-jpa-2.4.13.jar:2.4.13] 在 org.springframework. .jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143) ~[spring-data-jpa-2.4.13.jar:2.4.13] 在 org.springframework.data.repository.core.support.RepositoryMethodInvod( RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework。 data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke (QueryExecutorMethodInterceptor.java:152) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor ~88213884694)[ data-commons-2.4.13.jar:2.4.13] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10framework] 在.org.spring data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.4.13.jar:2.4.13] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceedInvocation. java:186) ~[spring-aop-5.3.10.jar:5.3.10] 在 org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.32.1207.8 10] 在 org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.10.jar:5.3.10] 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke.(TransactionInterceptor java:119) ~[spring-tx-5.3.10.jar:5.3.10] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.32.10308.818:5.32.10308.818 ] 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.10.jar:5.3.10] 在 org.springframework.aop.framework.ReflectiveMethodInvocati on.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145) ~ [spring-data-jpa-2.4.13.jar:2.4.13] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.10.jar:5.3.10] .springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.10.jar:5.3.10] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation82488218:868218) ~[spring-aop-5.3.10.jar:5.3.10] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.10.jar:5.3.10] at com.秒 un.proxy.$Proxy121.getDetailsById(未知來源)~[na:na] 在 Controller.getDetailsById(Controller.java:62)~[classes/:na] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke (本機方法)~[na:na] 位於 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] 位於 java.base/jdk.internal.reflect.AccessortingMethod調用(DelegatingMethodAccessorImpl.java:43)~[na:na] 在 java.base/java.lang.reflect.Method.invoke(Method.java:566)~[na:na] 在 org.springframework.883655086.8988. support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.10.jar:5.3.10] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring -web-5.3.10.jar:5.3.10] 在 org.springframework.web.servlet.mvc.method.ann otation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.10.jar:5.3.10] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895 )〜[spring-webmvc-5.3.10.jar:5.3.10] 5.3.10] at org.springframework.web.Servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:8721324694588:87) DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.10.jar:5.3.10] 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServl et.java:963) ~[spring-webmvc-5.3.10.jar:5.3.10] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.10.jar:5.3 .10] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.10.jar:5.3.10] at javax.servlet.http.HttpServlet.service(HttpServlet.java :655) ~[tomcat-embed-core-9.0.53.jar:4.0.FR] 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.10.88203.8878591 10] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.53.jar:4.0.FR] 在 org.apache.catalinaFilterCcore.ApplicationFir java:227) ~[tomcat-embed-core-9.0.53.jar:9.0.53] 在 org.apache.catalin a.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~ [tomcat-embed-websocket-9.0.53.jar:9.0.53] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.508.859:9.0.5087.859] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter. java:100) ] 在 org.apache.catalina.core.ApplicationFilterC hain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.53.jar:9.0.53] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFiltercatem28:8694528[8694528] -core-9.0.53.jar:9.0.53] at org.springframework.web.filter.formcontentfilter.dofilter.dofilter.dofilterternerternalternerternalterthertherternaltertherternerternal(FormContentFilter.java888888888888888888888888888.BY.93) 。 embed-core-9.0.53.jar:9.0.53] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.53.8820g.883.0288891] or springframework.boot.actuate.metrics.web.servlet.WebMvcMetri csFilter.doFilterInternal(WebMvcMetricsFilter.java:97) ~[spring-boot-actuator-2.4.11.jar:2.4.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web -5.3.10.jar:5.3.10] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[ spring-web-5.3.10.jar:5.3.10] at org.springframework.web.filter.onceperrequestfilter.dofilter.dofilter.dofilter(曾經Perrequestfilter.88213246694588888888888888888888888888.88088:119) catalina.core.ApplicationFilterChain.inter nalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.53.jar:9.0.53] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.89215638246) -9.0.53.jar:9.0.53] at org.8apache.CATALINA.CORE.CORE.CORE.STANDARDWRAPPERVAKE.INVOKE(StandardWrapperVake.8821324694588:197) 。 tomcat-embed-core-9.0.53.jar:9.0.53] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.578:8890108] org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)~[tomcat-embed-core- 9.0.53.jar:9.0.53] at org.8apache.CATALINA.CORE.CORE.CORE.STANDARDENGINEVALVE.INVOKE.INVOKE(StandardEngineValve.java888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889轉connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat -embed-core-9.0.53.jar:9.0.53] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache .coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java: 1726) ~[tomcat-embed-core-9.0.53.jar:9.0.53] 在 org.apache.tomcat.util.net.Socke tProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.53.jar:9.0.53] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed -Core-9.0.53.jar:9.0.53] at org.apache.tomcat.UTIL.UTIL.THREADS.THREADPOLERPOOLEXECECECECECECECECECECUTOR $ WRING(TREESPOOLEXECUTOR.88213246666669466694669466694666946669466946694669466946694669466946694669494.6669494) .apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.53.jar:9.0.53] 在 88213ja8284.694 ( java:834) ~[na:na] **
您正在運行本機查詢而不是 JPA 查詢,這就是為什么 getDetailsById(String requestId) 的返回類型是 Object[] 而不是 Clob 或 Model。假設您的實體有 4 列,然后 object[0] 將返回第一列column, object[1] 將返回第二列,依此類推。
我建議不要通過使用本機查詢來帶走好東西。 只需使用 JPA 查詢即可:)
通過以下方式修改您的方法簽名
public interface OrderRepository extends JpaRepository<Model, String>
{
@Query(value="SELECT o.payload FROM ORDER o WHERE o.requestId = ?1")
Payload getDetailsById(String requestId);
}
我認為您的方法 getDetailsById() 的返回類型是 Payload 而不是 Clob,更改它並嘗試運行。 那可能有用。
因為有效載荷實體和 Model 實體之間沒有關系,Model 實體有一個 CLOB 類型的有效載荷而不是一個實體,所以你可以做的是在兩個實體之間添加如下關系,這樣你就可以請求具有特定 request_id 的有效載荷,因為這里它將 request_id 作為外鍵保存在數據庫表中,這是一個片段示例:
@Entity
public class Payload {
@Lob
private Clob paylaod;
@OneToOne
@JoinColumn(name="request_id")
private Model model;
public Clob getPaylaod() {
return paylaod;
}
public void setPaylaod(Clob paylaod) {
this.paylaod = paylaod;
}
}
在你的 Model class 中有一個關系可以說 OneToOne 如下:
@Entity
@Table(name ="ORDER")
@Data
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Model implements Serializable {
@Id
@Column(name = "REQUEST_ID", nullable = false, unique = true)
private String requestId;
@Column(name = "VERSION")
private BigDecimal version;
@Column(name = "SOURCE")
private String source;
@Column(name = "SOURCE_ID")
private String sourceId;
@OneToOne(mappedBy="model")
private Payload payload;
}
現在您可以使用本機查詢或 JPQL 查詢來檢索您想要的內容,例如:
@Query(value="select * from payload where
payload.request_id=:requestId",nativeQuery=true)
Payload findByRequestId(@Param("requestId") String requestId);
希望這可以幫助 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.