使用DTO运行jpa查询并加入fetch时出现异常

时间:2018-01-02 12:12:15

标签: hibernate jpa projection dto

我正在尝试使用join fetch运行查询,但我也使用DTO投影来提高性能,但我得到以下异常:

  

org.hibernate.QueryException:查询指定的连接提取,但是   已获取的关联的所有者未出现在选择列表中   [FromElement {explicit,not collection join,fetch join,fetch non-lazy   性能,classAlias = PI,角色= returnitRest.Ereturn.productItems,表名= product_item,tableAlias = productite1_,原点= ereturn   ereturn0_,columns = {ereturn0_.id,className = returnitRest.ProductItem}}]   [SELECT DISTINCT new returnitRest.Ereturn(e.rma,e.shipper,e.carrier,   e.returnAction)FROM returnitRest.Ereturn e JOIN FETCH e.productItems   pi WHERE e.status ='RECEIVED'和e.shipper.email =:发货人AND   e.carrier.email =:carrier AND pi.returnAction =:returnAction]

这是查询:

    em.createQuery("SELECT DISTINCT new returnitRest.Ereturn(e.rma, e.shipper, e.carrier, e.returnAction) FROM ereturn e " +
            "JOIN FETCH e.productItems pi " +
            "WHERE e.status = 'RECEIVED' AND " +
            "e.shipper.email = :shipper AND " +
            "e.carrier.email = :carrier AND " +
            "pi.returnAction = :returnAction ")
            .setParameter("shipper", shipperEmail)
            .setParameter("carrier", issuer)
            .setParameter("returnAction", ReturnAction.valueOf(returnAction))
            .getResultList();

问题:

  • 该协会的失踪所有者是谁?
  • 我该怎么做才能修复此查询并仍使用DTO获得性能提升和加入提取?

非常感谢

2 个答案:

答案 0 :(得分:0)

这里不需要联接访存,甚至没有使用DTO中的产品项。普通的连接就足够了,那样,您也不会看到该错误。

答案 1 :(得分:0)

我无法让JOIN处理@OneToMany关系,所以相反,我做了另一种方法,即使用@ManyToOne关系。这种方式对我有用。