Hibernate HQL多个右连接,可选@ManyToOne

Hibernate HQL多个右连接,可选@ManyToOne,hibernate,hql,jpql,Hibernate,Hql,Jpql,我有一个如下所示的数据模型: 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

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

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
然而,当一个歌手没有歌迷或演唱会时,他不会被这个查询返回,因为与空歌迷集合的交叉积似乎是在歌迷与歌手正确结合之前建立的

我怎样才能解决这个问题?
谢谢

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

歌手{ @OneToMany(mappedBy=“singer”,fetch=FetchType.LAZY) 设置音乐会; @OneToMany(mappedBy=“singer”,fetch=FetchType.LAZY) 设置风扇; } 并且,您的HQL将更改为:

从Singer s中选择s
参加音乐会
加入我们的粉丝
当您搜索歌手时,hibernate将获取与该歌手相关的
粉丝
音乐会
。如果Singer没有相关数据,则将实例化空集