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