如何解决如何使用Hibernate JPA本机查询检索具有子实体集合的父实体?
我通常使用JPQL来查询数据库,但是今天出于性能原因和JPQL(联接子查询)中不可用的功能,我不得不使用本机查询。使用JPQL,可以使用连接提取来检索父实体及其子实体的集合。但是,当我尝试使用本机查询时,对于每个父实体,将返回多行,每行包含父及其子项之一的数据。然后,返回的列表包含父对象的重复对象。假设一个父母有两个孩子,那么下面的查询返回列表中的两个父母而不是1。
@Query(value="select * from Parent p left join Child c on p.parent_id = c.parent_id",nativeQuery = true)
List<Parent> getParents()
任何人都知道如何避免重复的父母,因此返回的结果如下所示
@Query(value="select p from Parent p left join fetch p.children")
List<Parent> getParents()
解决方法
由于您没有共享本机查询,因此很难说出导致基数增加的原因,但是使用DISTINCT
可能是一种方法,但这取决于您的实际选择。
如果您对允许您停留在JPA模型领域中的方法感兴趣,则应该看看Blaze-Persistence,它在JPA / Hibernate的from子句中提供了子查询支持:{ {3}}
使用https://persistence.blazebit.com/documentation/core/manual/en_US/index.html#subquery-in-from-clause和Entity-Views,这一切都非常简单。如果您分享用例并感兴趣,我可以帮助您弄清楚它的外观。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。