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
我怎样才能修好它?或者至少我应该挖到哪里
# 1 楼答案
试试看:
# 2 楼答案
你可以在这里找到更多信息:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-subqueries
在尝试将原始sql应用于hibernate时,我们需要注意一些事情
另一种选择是使用前面提到的连接简化查询