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
我的 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