有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate HQL嵌套查询

我有三个具有嵌套关系的类:

public class Route {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToMany(cascade = {CascadeType.DETACH, CascadeType.REFRESH}, fetch = FetchType.EAGER)
    private List<Place> places;
}

public class Place {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(cascade = {CascadeType.DETACH, CascadeType.REFRESH, CascadeType.REMOVE}, mappedBy = "place")
    private List<Image> images;
}

public class Image {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne(cascade = {CascadeType.REFRESH, CascadeType.DETACH})
    private Place place;

}

我需要通过路由id获取一个可分页的图像列表

这就是我的疑问:

@Repository
public interface ImageRepository extends CrudRepository<Image, Long> {
    @Query("select place.images from Place place where place.id in (select placeD.id from Place placeD where placeD in (select route.places from Route route where route.id = :routeId)) ")
    Page<List> findAllByRouteId(@Param("routeId") Long routeId, Pageable Page);
}

我尝试过不同的组合,但仍然没有结果。 我是HQL新手,阅读了很多教程,据我所知,它要求我像现在这样编写一个连接查询

但它不起作用。 它抛出一个错误:

InvalidDataAccessResourceUsageException: could not prepare statement

我怎样才能修好它?或者至少我应该挖到哪里


共 (2) 个答案

  1. # 1 楼答案

    试试看:

    @Query("SELECT DISTINCT i 
            FROM Route AS r
               LEFT JOIN r.places AS p
               LEFT JOIN p.images AS i
            WHERE r.id = :routeId)) ")