簡體   English   中英

使用 JPQL 通過連接表進行查詢時出錯

[英]Error while using JPQL to query by joining tables

我正在嘗試使用彼此具有一對多關系的路線實體的源和目的地屬性來獲取火車實體列表。 以路線 ID 作為外鍵的火車表。 表名分別是路線和火車。 Please help me as the query is throwing 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)! 路由存儲庫:

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);
}

路線實體:

@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;
    }

}

火車實體:

@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;
    }


}

這就是問題所在。 您的查詢應該定義表 bean 名稱而不是實際的表名稱。

在您的情況下,您應該使用 TrainEntity 而不是 train 和 RouteEntity 而不是 route。

public interface RouteRepository extends JpaRepository<RouteEntity, Integer> {
    @Query("SELECT t FROM TrainEntity t JOIN RouteEntity r WHERE r.source=?1 AND r.destination=?2")
    public List<TrainEntity> findBySourceDestination(String source,String destination);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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