未找到能够从 Integer 类型转换为 CustomType 实体的转换器

问题描述 投票:0回答:1

我得到以下堆栈跟踪:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Integer] to type [com.train.management.entities.TrainDetails]
    at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:294) ~[spring-core-6.1.6.jar:6.1.6]
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:185) ~[spring-core-6.1.6.jar:6.1.6]
    at org.springframework.core.convert.support.ArrayToObjectConverter.convert(ArrayToObjectConverter.java:68) ~[spring-core-6.1.6.jar:6.1.6]
    at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41) ~[spring-core-6.1.6.jar:6.1.6]
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:182) ~[spring-core-6.1.6.jar:6.1.6]
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:165) ~[spring-core-6.1.6.jar:6.1.6]
    at org.springframework.data.repository.query.ResultProcessor$ProjectingConverter.convert(ResultProcessor.java:305) ~[spring-data-commons-3.2.5.jar:3.2.5]
    at org.springframework.data.repository.query.ResultProcessor$ChainingConverter.lambda$and$0(ResultProcessor.java:233) ~[spring-data-commons-3.2.5.jar:3.2.5]
    at org.springframework.data.repository.query.ResultProcessor$ChainingConverter.convert(ResultProcessor.java:240) ~[spring-data-commons-3.2.5.jar:3.2.5]
    at org.springframework.data.repository.query.ResultProcessor.processResult(ResultProcessor.java:160) ~[spring-data-commons-3.2.5.jar:3.2.5]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:152) ~[spring-data-jpa-3.2.5.jar:3.2.5]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:137) ~[spring-data-jpa-3.2.5.jar:3.2.5]
    at 

我的课程如下

列车详情


@Entity
@Table(name = "train_details")
public class TrainDetails {
    
    @Id
    @Column(name = "train_id")
    private String id;
    
    @Column(name = "train_name")
    private String trainName;
    
    @Column(name = "total_distance_covers")
    private String totalDistance;
    
    @Column(name = "train_code")
    private String trainCode;
    
    @Column(name = "total_stops")
    private int totalStops;
    
    @ManyToOne
    @JoinColumn(name = "start_station")
    private Station startStation;
    
    
    @ManyToOne
    @JoinColumn(name = "end_station")
    private Station endStation;

    @OneToMany(mappedBy = "trainName", cascade = CascadeType.ALL)
    private List<Coach> coaches;

    
}

我的仓库界面是

StationRepo


public interface StationRepo extends JpaRepository<Station, String> {

    
    @Query(nativeQuery = true, value="SELECT td.*\r\n"
            + "FROM train_details td\r\n"
            + "JOIN station s_start ON td.start_station = s_start.station_id\r\n"
            + "JOIN station s_end ON td.end_station = s_end.station_id\r\n"
            + "WHERE s_start.station_code = ?1"
            + " OR s_end.station_code = ?1")
    public List<TrainDetails> getAllTrainsComingOnStation(String stationCode);

}

我也尝试将查询更改为此

    @Query("SELECT td FROM TrainDetails td\r\n"
            + "JOIN td.startStation s_start\r\n"
            + "JOIN td.endStation s_end\r\n"
            + "WHERE s_start.stationCode = :stationCode\r\n"
            + "   OR s_end.stationCode = :stationCode\r\n")
    public List<TrainDetails> getAllTrainsComingOnStation(@Param("stationCode") String stationCode);
    

它工作得很好,我的疑问是为什么它能够用于第二个而不是本机查询一个?我目前使用的是 spring boot 3.2.5 版本

java spring spring-boot spring-data-jpa jpql
1个回答
0
投票

您的第一个查询不是本机查询,它是使用位置参数而不是命名参数的 JPQL(Java 持久性查询语言)。也是一个 NativeQuery 由 EntityManager#createNativeQuery 定义为更新、删除或插入;不作为选择。 https://docs.oracle.com/javaee/7/api/ 尝试从注释中删除nativeQuery属性。

© www.soinside.com 2019 - 2024. All rights reserved.