我正在使用Spring Boot,并尝试利用HQL在3个表之间建立一个LEFT JOIN。

我拥有的三个实体是Usage,SubscriptionPeriod和Subscription。在实体类中设置了必要的Hibernate注释。


用法和SubscriptionPeriod:多对一(SubscriptionPeriod可以有多种用法)
Subscription and SubscriptionPeriod:多对一(一个Subscription可以有多个SubscriptionPeriod)。


目标:我想通过提供订阅ID来获取所有用法,用法的标题为“ NEW”。而且,我想在一个数据库请求中完成

我有:

String hql =
                "SELECT DISTINCT u " +
                "FROM Usage u " +
                "LEFT JOIN u.subscriptionPeriod p " +
                "LEFT JOIN p.subscription s " +
                "WHERE s.remoteId = :remoteId AND u.title='NEW'";


当前,“ FROM使用情况”周围似乎存在语法错误。它显示为“无法解析符号用法”

我怎样才能实现自己想要的?我也乐于听取其他解决方案。谢谢。

最佳答案

我可能以一种更复杂的方式来思考它。这个@Query在方法上很好用。希望这对某人有用。

  @Query(
                "SELECT u " +
                "FROM usages u " +
                "LEFT JOIN u.subscriptionPeriod p " +
                "LEFT JOIN p.subscription s " +
                "WHERE u.paymentStatus = 'NEW' AND s.remoteId = :remoteId"
        )
  public List<Usage> find(@Param("remoteId") String param)

08-28 22:52