java - 如何在休眠 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,我可以正确地看到表中的列。
解决方案
您应该将@JoinColumn
to 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
但在您的情况下这不是必需的。
推荐阅读
- android - 如何从 RecyclerView 中自动选择第一项?
- javascript - JQuery:使用 JQuery 在 iframe 下选择 div
- javascript - 检测 iCheck 复选框上的 Shift 键 + 单击事件
- java - ForkJoinPool 任务优先级
- java - Java:使用列表映射 POST 正文
- javascript - 是否可以在不使用文件路径 src 的情况下插入图像?
- c++ - 如何推导出 std::advance 迭代器类型?
- css - Sidenav 中的右对齐开关
- c# - xamarin 表单 - 使用 c# 计算图像源的尺寸
- arrays - 数组有元素但长度为 0