【问题标题】:HQL Fetch Join without knowing object implementationHQL Fetch Join 不知道对象实现
【发布时间】:2020-08-08 01:07:19
【问题描述】:

我遇到了性能问题,我正在尝试添加一些 fetch join 以仅在一个请求中获取一些数据。

我的问题是: 我得到了一个映射对象AbstractObject。 而且我还得到了其他映射对象,例如ObjectAObjectB 等……都在扩展AbstractObject

在我的ObjectA 中,我得到了foos 的列表。 在我的ObjectB 中,我得到了otherFoos 的列表。

我正在尝试做的事情: 我想写一个这样的请求:

entityManager.createQuery("SELECT ao FROM AbstractObject ao LEFT JOIN FETCH ao.foos LEFT JOIN FETCH ao.otherFoos WHERE ao.id = ?1", AbstractObject.class)

问题:我得到了一个nullPointerException,因为我认为hibernate 不知道foosotherFoosAbstractObject。 在我看来,我不知道我是否会有ObjectAObjectB

有人知道这个问题的解决方案吗?

休眠版本:5.0.12.Final

【问题讨论】:

  • 附加信息:我不想使用复活节解决方案总是得到 foos 和 otherFoos。

标签: sql hibernate orm mapping hql


【解决方案1】:

通常,为了执行 HQL 查询并在同一结果上返回多个实体的属性,您需要投影到 DTO。

因此,您将创建一个 DTO,例如 ObjectAB,它不会被映射,它可能会同时扩展对象 A 和 B,然后您将创建查询并将结果转换器设置为此 DTO。

或者,您可以使用元组而不是 DTO,但这不会改变主要思想。有关此方法的更多详细信息,您可以阅读this article

【讨论】:

  • 谢谢克里斯托斯!这正是我正在寻找的这种解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-08-30
  • 2023-03-03
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2021-02-20
相关资源
最近更新 更多