当前位置: 首页 > 知识库问答 >
问题:

使用DTO和join fetch运行jpa查询时出现异常

谭高峯
2023-03-14

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

org.hibernate.QueryException:查询指定的联接获取,但获取的关联的所有者不存在于选择列表中[FromElement{显式,不是集合联接,获取联接,获取非惰性属性,类Alias=pi,角色=returnitRest。Ereturn.productItems, tableName=product_item, tableAlias=productite1_,源=ere转ereturn0_,列={ereturn0_. id, class Name=returnitRest. ProductItem}}][SELECT DISTINCT new returnitRest. Eback(e.rma,e.shipper,e.carrier,e.returnAction)from returnitRest. Eback e JOIN FETCHe.productItems pi WHEREe.status='RECEIVED'ANDe.shipper.email=:托运人与e.carrier.email=:承运人与pi.returnAction=: returAction]

以下是查询:

    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个答案

易自珍
2023-03-14

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

阮炯
2023-03-14

您不需要在此处进行连接获取,甚至没有在DTO中使用产品项。一个普通的连接就足够了,这样,您也不会看到那个错误。

 类似资料:
  • 我使用包对MySQL服务器运行查询 以下是连接设置 它适用于所有查询,只有查询有26个参数: 我一直收到以下错误消息: C:\myprojects\tms\node_modules\mysql2\lib\commands\commands.js:30 this.onresult(err);^ TypeError:this.onresult不是Connection.Query.Execute(C:\

  • 问题内容: 我有带有库的IntelliJ项目:Hibernate-entitymanager 4.3.4和JPA 2.0-2.0。使用postgresql-9.3.1100.jdbc4连接到数据库。如何解决? jpa-ql>从ItemEntity中选择ItemEntity.name; 问题答案: 只需阅读文档: http://docs.oracle.com/javaee/7/api/javax/p

  • 我想用本机查询的结果填充数据传输对象类。但我收到以下错误: 这是我的DTO课 这是我的原生查询。这是一个简单的查询: 我使用的是Spring Data JPA,但我知道在hibernate中存在一个方法setResultTransformer,但我在JPA中找不到类似的方法。 在我的例子中,我需要使用本机查询,因为在其他查询中会使用表值函数。

  • 员工与部门之间的关联是多对多的双向关联。 我正在尝试在删除受雇者之前删除关联

  • 以下是Liquibase输入文件: --更改集dank:1 runalways=true failonerror:false 删除表aaa_schema.foo IBM错误代码-104是关于语法问题的。根据查看错误消息,我猜测它与行尾字符“;”有关。但是我已经尝试了使用分号和不使用分号的查询。IBM自己的db2也接受分号,因此它似乎是一个有效的选择。 非常感谢在找出此错误原因方面的任何帮助。

  • 当运行codeception时,我得到了很多错误:DeepCopy\DeepCopy::recursiveCopy。 这是个问题,让我困惑! 当我只有4个单元测试用例时,我使用codeception播放得很好: 当我仍然充满单元测试用例时,故事就发生了。 在我的测试类中有5个单元测试,然后我得到了这个: 下面是代码: php_error.log: PHP 195.#################