簡體   English   中英

錯誤:找不到能夠從類型 JPA Model 類型轉換為自定義類型 object [型號] 的轉換器

[英]Error: No converter found capable of converting from type JPA Model type to Custom object [Model]

  1. 這是我的 pojo class。
public class Payload {

private Clob paylaod;


public Clob getPaylaod() {
    return paylaod;
}

public void setPaylaod(Clob paylaod) {
    this.paylaod = paylaod;
}

}
  1. 這是我的實體 class。
@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. 下面是controller class。
@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM