mog*_*lol 8 java hibernate hql
我有一个具有单向一对多关系的类,如下所示:
public class Order {
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name="order_item", joinColumns={@JoinColumn(name="order_id")}, inverseJoinColumns={@JoinColumn(name="item_id")})
public Set<Item> getItems() {
return items;
}
}
Run Code Online (Sandbox Code Playgroud)
通常获取此订单的内容很简单:
List<Item> items = order.getItems();
Run Code Online (Sandbox Code Playgroud)
但无论出于何种原因,我可能希望以某种方式过滤我的结果,并以最快的方式检索项目集合的一部分,例如超过特定价格的所有项目,低于特定股票等(不返回然后全部过滤然后).为此,我将运行HQL查询来检索特定订单的项目,并将更多内容添加到我的where子句或我的查询对象中.
直觉我会想要这种行为(这是完全错误的):
SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order
Run Code Online (Sandbox Code Playgroud)
但当然这是错误的,因为HQL在映射实体方面起作用,所以我不能在查询中使用连接表.那么这样做的正确方法是什么?
编辑:
我找到了这个问题的答案,我想要以下查询:
Select o.items from Order o where o = ?
Run Code Online (Sandbox Code Playgroud)
这允许我获取订单的项目集合,而不必使用双向关系.我现在对这个问题的第二阶段感到困惑,这是如何过滤这个集合的结果,最简单的例子是:
Select o.items from Order o where o = ? order by o.items.somenumberfield asc
Run Code Online (Sandbox Code Playgroud)
哪个返回非法尝试取消引用收集,那么我将如何过滤我的项目?
编辑:
票证解决方案实际上是正确的,我最初误解了解决方案.
select item from Order order
inner join order.items item
where order = :order
and ...
Run Code Online (Sandbox Code Playgroud)
HQL查询使用实体及其关联.关联使用连接表的事实对于HQL来说并不重要:您可以浏览关联,Hibernate会对SQL进行适当的转换.
| 归档时间: |
|
| 查看次数: |
9225 次 |
| 最近记录: |