QuerySyntaxException:在获取的关联中不允许使用子句;使用过滤器

QuerySyntaxException: with-clause not allowed on fetched associations; use filters

我的 HQL 请求

SELECT p FROM Payment p 
LEFT JOIN FETCH p.paymentProperties pr ON p.id = pr.payment.id 
WHERE 
p.user.id = :userId ORDER BY id DESC

数据class实体

@Entity
@Table (name = "t_payment")
public class Payment {
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne (cascade = CascadeType.DETACH)
    @JoinColumn (name = "user_id", nullable = false)
    private User user;

    @OneToMany (mappedBy = "payment", fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.DETACH})
    private List<PaymentProperty> paymentProperties;
}


@Entity
@Table (name = "t_payment_property")
public class PaymentProperty {
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne (fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.DETACH})
    @JoinColumn (name = "payment_id", nullable = false)
    private Payment payment;

}


@Entity
@Table (name = "t_user")
public class User {
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    private Long id;
}

在结果异常中:QuerySyntaxException:获取的关联不允许使用子句;使用过滤器

有什么想法可以在不删除 fetch 的情况下修复它吗?

试试这个查询应该有效:

  SELECT p FROM Payment p 
  LEFT JOIN FETCH p.paymentProperties pr  
   WHERE p.id = pr.payment.id
   AND   p.user.id = :userId 
   ORDER BY p.id DESC

只需删除 ON p.id = pr.payment.id。不是 SQL 而是 HQL

SELECT p FROM Payment p 
LEFT JOIN FETCH p.paymentProperties pr
WHERE 
p.user.id = :userId ORDER BY p.id DESC