我正在尝试使用路线实体的源和目的地属性来获取火车实体的列表,它们之间具有一对多的关系。以路线ID为外键的火车表。表名称分别是路线和火车。请查询查询,以帮助我java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.infyrail.app.repository.RouteRepository.findBySourceDestination(java.lang.String,java.lang.String)!
RouteRepository:
public interface RouteRepository extends JpaRepository<RouteEntity, Integer> {
@Query("SELECT t FROM train t JOIN route r WHERE r.source=?1 AND r.destination=?2")
public List<TrainEntity> findBySourceDestination(String source,String destination);
}
RouteEntity:
@Entity
@Table(name="route")
public class RouteEntity {
@Id
@GenericGenerator(name="route_id",
strategy="com.infyrail.app.generator.RouteIdGenerator")
@GeneratedValue(generator = "route_id")
@Min(value = 100)
@Max(value = 999)
Integer id;
String source;
String destination;
@OneToMany(mappedBy = "route",
cascade=CascadeType.ALL,orphanRemoval = true)
private List<TrainEntity> trainList;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
public List<TrainEntity> getTrainList() {
return trainList;
}
public void setTrainList(List<TrainEntity> trainList) {
this.trainList = trainList;
}
}
TrainEntity:
@Entity
@Table(name="train")
public class TrainEntity {
//@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@GenericGenerator(name="train_id",
strategy="com.infyrail.app.generator.TrainIdGenerator")
@GeneratedValue(generator = "train_id")
@Min(value = 100)
@Max(value = 999)
Integer id;
String trainName;
String arrivalTime;
String departureTime;
Double fare;
@ManyToOne(fetch = FetchType.LAZY)
@Autowired
RouteEntity route;
public RouteEntity getRoute() {
return route;
}
public void setRoute(RouteEntity route) {
this.route = route;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTrainName() {
return trainName;
}
public void setTrainName(String trainName) {
this.trainName = trainName;
}
public String getArrivalTime() {
return arrivalTime;
}
public void setArrivalTime(String arrivalTime) {
this.arrivalTime = arrivalTime;
}
public String getDepartureTime() {
return departureTime;
}
public void setDepartureTime(String departureTime) {
this.departureTime = departureTime;
}
public Double getFare() {
return fare;
}
public void setFare(Double fare) {
this.fare = fare;
}
}
将nativeQuery = true
添加到@Query注释:
@Query("SELECT t FROM train t JOIN route r WHERE r.source=?1 AND r.destination=?2", nativeQuery = true)
或使用带有@Param批注的参数。
@Query("SELECT t FROM train t JOIN route r WHERE r.source=:source AND r.destination=:destination")
public List<TrainEntity> findBySourceDestination(@Param("source") String source, @Param("destination") String destination);
查找更多信息here