微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HQL 多重右连接,可选 @ManyToOne

如何解决HQL 多重右连接,可选 @ManyToOne

我有一个如下所示的数据模型:

Singer {}

Concert {
  @ManyToOne
  Singer singer;
}

Fan {
  @ManyToOne
  Singer singer;
}

现在我想得到一个歌手、他们的演唱会和粉丝的所有组合的列表(当然,这只是一个例子)。我想要所有歌手,即使他们没有音乐会或粉丝。我在 HQL 中这样尝试过:

SELECT s,c,f FROM Concert c RIGHT JOIN c.singer s,Fan f RIGHT JOIN f.singer s1 WHERE s=s1

但是,当歌手没有粉丝或演唱会时,此查询不会返回他,因为粉丝集合为空的交叉产品似乎是在粉丝与歌手右连接之前构建的。

我该如何解决? 谢谢!

解决方法

嗯,我认为你应该通过改变你的方法来面对这个问题。尝试使用实体关系,像这样:

Singer {
    @OneToMany(mappedBy = "singer",fetch = FetchType.LAZY)
    Set<Concert> concerts;
    @OneToMany(mappedBy = "singer",fetch = FetchType.LAZY)
    Set<Fan> fans;
}

并且,您的 HQL 更改为:

select s from Singer s 
    join fetch s.concerts 
    join fetch s.fans

当您搜索歌手时,hibernate 将获取与歌手相关的 fansconcerts。如果 Singer 没有相关数据,则 Empty Sets 将被实例化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。