首页 > 解决方案 > 如何在休眠 sql (HQL) 查询中引用连接列字段(@OneToMany 案例)?

问题描述

我有一个Customer具有以下吸气剂的类:

   @OneToMany
   @JoinColumn(name="CUST_ID") // join column is in table for Order
   public Set<Order> getOrders() {return orders;}

所以列CUST_ID就是Order类。

如何在 HQL 中引用此列?

例如

entityManager.createQuery("FROM Order o WHERE o.CUST_ID = 1")

Order 类中是否需要某种 getter 或特殊注释?

目前 Hibernate 无法识别列 ( java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property)。使用通常的 SQL,我可以正确地看到表中的列。

标签: javahibernatejpaorm

解决方案


您应该将@JoinColumnto Order 实体移动并更改@OneToMany

客户

   @OneToMany(mappedBy = "customer")
   public Set<Order> getOrders() {return orders;}

订购

@ManyToOne
@JoinColumn(name="CUST_ID")
public Customer getCustomer();

查询

entityManager.createQuery("FROM Order  o INNER JOIN o.customer c WHERE c.custId = 1")

一般来说@JoinColumn,用于@ManyToOne. @JoinTable一起使用,@OneToMany但在您的情况下这不是必需的。


推荐阅读