【问题标题】:Hibernate HQL nested queryHibernate HQL 嵌套查询
【发布时间】:2016-02-23 19:12:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: java mysql spring hibernate hql


    【解决方案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)) ")
    

    【讨论】:

    • 它有效,谢谢!你能解释一下吗?至于傻瓜)我的意思是它不应该选择路线而不是图像吗?
    【解决方案2】:

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

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

    如前所述,其他替代方法是使用 JOIN 来简化查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2011-05-18
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多