首页 > 解决方案 > 如何根据“多”方的字段正确获取 OneToMany 关系中的值?

问题描述

假设我有一个实体

餐厅

带字段:

 @OneToMany(mappedBy = "restaurant", fetch = FetchType.LAZY)
 private Set<MenuEntry> menu;

MenuEntry 实体具有下一个字段:

@Column(name = "date_time_created", nullable = false)
private LocalDate dateCreated;

这显然代表创建条目的日期。

我需要编写 JPQL 查询,它会给我餐厅,其中一组菜单包括具有指定 dateCreated 的条目。

我编写了带有下一个注释的方法:

@EntityGraph(attributePaths = {"menu"}, type = EntityGraph.EntityGraphType.LOAD)

@Query("SELECT r FROM Restaurant r WHERE r.id=:restaurantId AND  r.menu 
IN (SELECT m FROM MenuEntry m WHERE m.dateCreated=:dateCreated)")

但是当我尝试执行此查询时,我遇到了“格式错误的数字常量”异常。您能否解释一下,如何在我的情况下正确获取值?谢谢!

标签: javasqlhibernatejpajpql

解决方案


从 Restaurant r JOIN r.menu m 中选择 r,其中 m.dateCreated=:dateCreated 和 r.id=:restaurantId

试试这个...这将工作...无需使用内部查询


推荐阅读