如何使用WITH子句编写休眠查询来自定义ON子句

编程入门 行业动态 更新时间:2024-10-23 11:27:19
本文介绍了如何使用WITH子句编写休眠查询来自定义ON子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用以下HQL查询:

feeds = (List<Album>) session.createQuery( "select distinct album from Album as album " + "left join album.postImageses as pi with pi.isAlbumCover=:isCover " + "where album.atom.id=:aid ") .setParameter("isCover", "Yes") .setParameter("aid", id) .list();

此查询工作正常。 但问题是,我只想从postImageses中获取isAlumCover值为‘Yes’的图像 但上述查询正在获取所有图片(图片是否为专辑封面)。

那么,我如何才能使用isAlbumCover='Yes'只获取图像(而不是其他)。 如何解决此问题。

推荐答案

Hibernate不能为您提供部分一对多结果。您总是让所有孩子确保一致性。

您需要将查询颠倒过来:

select ps from PostImage ps inner join fetch ps.album albm inner join fetch albm.atom atm where ps.isAlbumCover = :isCover and atm.id = :aid

此查询假定您在相册和PostImage之间具有双向关联,因此PostImage也具有@ManyToOne相册引用。

要证明这是不可能的,Hibernate documentation是这样说的:

FETCH连接通常不需要分配别名,因为 不应在WHERE子句中使用关联对象(或任何 其他条款)。

因此提取不受WHERE子句的影响。在您的示例中,WITH子句最多只能筛选根实体(专辑),但所有关联的集合(PostImageses)将受fetching policy的限制。

因为您没有显式使用FETCH指令,这意味着查询将使用映射获取策略。如果一对多关联是惰性的,则不会在此查询中进行初始化。一旦您访问它,Hibernate将发出一个新的查询来初始化它,这就是WITH子句不筛选子集合的原因。

更多推荐

如何使用WITH子句编写休眠查询来自定义ON子句

本文发布于:2023-10-23 22:46:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1522223.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子句   如何使用   定义

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!