错误:找不到能够从类型JPA Model类型转换为Custom对象[Model]的转换器


  1. 这是我的pojo类
public class Payload {
private Clob paylaod;

public Clob getPaylaod() {
return paylaod;
}
public void setPaylaod(Clob paylaod) {
this.paylaod = paylaod;
}
}
  1. 这是我的实体类
@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);
}
  1. 下面是控制器类
@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.Getting Below错误:

**org.springframework.core.covert.ConverterNotFoundException:找不到能够从类型[org.springfframework.data.jpa.restore.query.AbstractJpaQuery$TupleConverter$TupleBackedMap]转换为类型[model.PPayload]的转换器网址:org.springframework.core.covert.support.GenericConversionService.handleConverterNotFound(GenericConversionServices.java:322)~[spring-core-5.3.10.jar:5.3.10]网址:org.springframework.core.covert.support.GenericConversionService.covert(GenericConversionServices.java:195)~[spring-core-5.3.10.jar:5.3.10]网址:org.springframework.core.covert.support.GenericConversionService.covert(GenericConversionServices.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.413.jar:2.4.13]在org.springframework.data.repository.query.ResultProcessor$ChainingConverter.lambda$和$0(ResultProcessor.java:229)~[spring-data-commons-2.413.jar:2.4.13]在org.springframework.data.repository.query.ResultProcessor$ChainingConverter.convert(ResultProcessor.java:240)~[spring-data-commons-2.413.jar:2.4.13]网址:org.springframework.data.repository.query.ResultProcessor.processResult(ResultProcessor.java:170)~[spring-data-commons-2.413.jar:2.4.13]在org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:158)~[spring-data-jpa-24.13.jar:2.4.13]网址:org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143)~[spring-data-jpa-24.13.jar:2.4.13]位于org.springframework.data.restore.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)~[spring-data-commons-2.413.jar:2.4.13]位于org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvokeer.java:121)~[spring-data-commons-2.413.jar:2.4.13]位于org.springframework.data.repository.core.support.QueryExecutiorMethodInterceptor.doInvoke(QueryExecutiorMethod Interceptor.java:152)~[spring-data-commons-2.413.jar:2.4.13]网址:org.springframework.data.repository.core.support.QueryExecutiorMethodInterceptor.ioke(QueryExecutiorMethod Interceptor.java:131)~[spring-data-commons-2.413.jar:2.4.13]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.3.10.jar:5.3.10]网址:org.springframework.data.product.DefaultMethodInvokingMethodInterceptor.ioke(DefaultMethodInvokingMethodInterceptor.java:80)~[spring-data-commons-2.413.jar:2.4.13]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.3.10.jar:5.3.10]在org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)~[spring-tx-5.3.10.jar:5.3.10]网址:org.springframework.transaction.intercept.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)~[spring-tx-5.3.10.jar:5.3.10]位于org.springframework.transaction.interceptor.TransactionInterceptor.ininvoke(TransactionInterceptor.java:119)~[spring-tx-5.3.10.jar:5.3.10]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.3.10.jar:5.3.10]位于org.springframework.do.support.PersistenceExceptionTranslationInterceptor.ioke(PersistenceExceptionTranslationInterceptor.java:137)~[spring-tx-5.3.10.jar:5.3.10]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.3.10.jar:5.3.10]位于org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.ioke(CrudMethodMetadataPostProcessor.java:145)~[spring-data-jpa-2.413.jar:2.4.13]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.3.10.jar:5.3.10]位于org.springframework.aop.interceptor.ExposeInvocationInterceptor.ioke(ExposeInvocationInterceptor.java:97)~[spring-aop-5.3.10.jar:5.3.10]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186)~[spring-aop-5.3.10.jar:5.3.10]网址:org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynaticalAopProxy:java:215)~[spring-aop-5.3.10.jar:5.3.10]网址:com.sun.proxy.$Proxy121.getDetailsById(未知来源)~[na:na]位于Controller.getDetailsById(Controller.java:62)~[classes/:na]位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)~[na:na]位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:na]位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:na]位于java.base/java.lang.reflect.Method.ioke(Method.java:566)~[na:na]位于org.springframework.web.method.support.IInvocableHandlerMethod.doInvoke(InvocableHandler method.java:205)~[spring-web-5.3.10.jar:5.3.10]网址:org.springframework.web.method.support.InvocaleHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)~[spring-web-5.3.10.jar:5.3.10]位于org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)~[spring-webmvc-5.3.10.jar:5.3.10]位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)~[spring-webmvc-5.3.10.jar:5.3.10]网址:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)~[spring-webmvc-5.3.10.jar:5.3.10]网址:org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethod Adapter.java:87)~[spring-webmvc-5.3.10.jar:5.3.10]位于org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)~[spring-webmvc-5.3.10.jar:5.3.10]网址:org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)~[spring-webmvc-5.3.10.jar:5.3.10]网址:org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)~[spring-webmvc-5.3.10.jar:5.3.10]网址:org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)~[spring-webmvc-5.3.10.jar:5.3.10]在javax.servlet.httpHttpServlet.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.jar:5.3.10]在javax.servlet.httpHttpServlet.service(HttpServlet.java:764)~[tomcat-embed-core-9.0.53.jar:4.0.FR]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)~[tomcat-embed-websocket-90.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)~[spring-web-5.3.10.jar:5.3.10]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.3.10.jar:5.3.10]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)~[spring-web-5.3.10.jar:5.3.10]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.3.10.jar:5.3.10]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.springframework.boot.activate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)~[spring-boot-actuator-2.4.11.jar:2.4.11]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.3.10.jar:5.3.10]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncoding filter.java:201)~[spring-web-5.3.10.jar:5.3.10]网址:org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest filter.java:119)~[spring-web-5.3.10.jar:5.3.10]网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.StandardWrapperValv.invoke(StandardWrapperValve.java:197)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.StandardContextValv.invoke(StandardContextValv.java:97)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.authenticator.AuthenticatorBase.ioke(AuthenticatorBase.java:540)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.StandardHostValv.invoke(StandardHostValve.java:135)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.vvals.ErrorReportValv.invoke(ErrorReportValve.java:92)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.core.StandardEngineValv.invoke(StandardEngineValv.java:78)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.catalina.connecter.CoyoteAdapter.service(Coyotedapter.java:357)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.coyote.AbstractProcessorLight.produce(AbstractProcessorLight.java:65)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址: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.SocketProcessorBase.run(SocketProcessorBase.java:49)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.tomcat.util.threads.ThreadPoolExecutior.runWorker(ThreadPoolExecutior.java:1191)~[tomcat-embed-core-9.0.53.jar:9.0.53]网址:org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)~[tomcat-embed-core-9.0.53.jar:9.0.53]在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)~[tomcat-embed-core-9.0.53.jar:9.0.53]在java.base/java.lang.Thread.run(Thread.java:834)~[na:na]**

您运行的是本机查询,而不是JPA查询,这就是为什么getDetailsById(String requestId)的返回类型是Object[]而不是Clob或Model。假设您的实体有4列,那么对象[0]将返回第一列,对象[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,请更改它并尝试运行。这可能奏效。

因为payload Entity和Model实体之间没有关系,Model实体有一个CLOB类型的payload而不是实体,所以你可以做的是如下添加两个实体之间的关系,这样你就可以用特定的request_id请求payload,因为在这里它将把request_id作为外键保存在db表中,下面是一个片段示例:

@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类中有一个与它的关系,比如说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);

希望这能有所帮助!

最新更新