java - Spring Boot JPA LEFT JOIN 在 3 个表中

标签 java spring-boot jpa spring-data-jpa left-join

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

我拥有的三个实体是“使用情况”、“订阅期间”和“订阅”。实体类中已设置必要的Hibernate注解。

  • 使用和订阅周期:多对一(一个订阅周期可以有多个使用)
  • 订阅和订阅周期:多对一(一个订阅可以有多个订阅周期)。

目标:我想通过提供订阅 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'";

目前,“FROMUsage”似乎存在语法错误。它显示“无法解析符号用法”

怎样才能实现我想要的目标?我也愿意听取替代解决方案。谢谢。

最佳答案

我可能以一种更复杂的方式思考它。方法上的这个 @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)

关于java - Spring Boot JPA LEFT JOIN 在 3 个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57928286/

相关文章:

java - 限制 switch/if 选项的数量吗?

java - 防止请求在 JSON 文件更新时从 json 文件中获取数据

spring - 不可解析的父 POM : Could not transfer artifact org. springframework.boot

java - 如何配置 Thymeleaf 模板位置

java - Spring 无法注入(inject)实体管理器工厂

mysql - 如何在 JPA(而不是 JPQL)中选择实体的一部分?

java - 如何设置 Java 应用程序的自定义框架和任务栏图标?

java - 正确的归并排序实现?

spring-boot - Keycloak 保护 Spring Boot 应用程序 : Try to configure publicly available pages

mysql - 非法参数异常 : Type cannot be null (in JAVA)