Hibernate HQL 嵌套查询

Hibernate HQL nested query

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

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

我该如何解决?或者至少我应该挖到哪里?

尝试:

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

您可以在此处找到更多信息:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-subqueries

当我们尝试将 raw sql 应用于休眠时,有一些事情需要注意。

其他替代方法是使用提到的 JOIN 来简化查询。