我正在使用Spring Data和Hibernate作为我的网络应用程序。我有以下实体类。
@Entity
public class Purchase{
@Id
@GeneratedValue
private Long id;
@OneToMany(fetch = FetchType.LAZY)
private List<Item> items;
// etc
}
我需要在每次购买时急切地加载一些购买,包括相关商品。我使用以下JPQL:
@Query("select p from Purchase p join fetch p.items where r.id in (:ids)")
List<Purchase> getPurchasersByIds(@Param("ids") List<Long> ids);
但是,返回的对象数量不是购买数量,而是项目数量。例如,如果我只有一个购买,其中包含两个项目,则返回的列表将包含同一购买的两个对象。如何让它只返回一个带有两个急切加载项的Purchase对象?
感谢您的帮助!
答案 0 :(得分:1)
我认为这是根据规范(不幸的)。参见JPA 2.1,ch。 4.4.5.3&#34;获取连接&#34;:
以下查询返回一组部门。作为副作用,即使它们不是显式查询结果的一部分,也会检索这些部门的关联员工。 [...]
SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1
[...]因此,例如,如果部门1有五名员工,则上述查询会返回对部门1实体的五次引用。
答案 1 :(得分:0)
如果您需要返回p的数量,请尝试选择count(p)