【问题标题】:QuerySyntaxException: with-clause not allowed on fetched associations; use filtersQuerySyntaxException:在获取的关联上不允许使用 with-clause;使用过滤器
【发布时间】:2017-08-11 13:25:38
【问题描述】:

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

数据类实体

@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: with-clause not allowed on fetched associations;使用过滤器

任何想法都必须在不删除 fetch 的情况下修复它?

【问题讨论】:

    标签: java postgresql hibernate hql


    【解决方案1】:

    试试这个查询应该可以工作:

      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
    

    【讨论】:

    • 错误:列引用“id”不明确
    • id 不明确,立即尝试@Ant20
    • HHH000104:使用集合获取指定的 firstResult/maxResults;在内存中应用!但是工作,谢谢你
    【解决方案2】:

    只需删除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
    

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2018-05-12
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2019-10-07
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多