猿问

JPA匹配ManyToMany关系中的元素子集

在我的数据库中,我有两个表:Person和Language。这两个表在Hibernate中以多对多关系映射,每个人说多种语言。

现在,我想编写一个方法,该方法需要一种语言列表并返回说这些语言的所有(逻辑与)的人的列表。我试图建立一个像这样的标准:

Restrictions.in("languages", languagesList);

但这会返回一个使用这些语言的任何(逻辑或)语言的人员列表。

我在网上看了一下,发现有一些使用连词和不存在的技巧,但它们看起来更像是黑客,所以我想检查是否有一种更干净的方法来实现这一目标。

有什么建议么?谢谢。


慕莱坞森
浏览 139回答 2
2回答

绝地无双

尝试JPQL查询,该查询首先选择所有会说一种语言的人,然后从该列表中选择还会说另一种语言的人。List<Person> ps = em.createQuery("select distinct p from Person p join p.languages l where l.languageName = 'english' "+ " and p.id in (select distinct p.id from Person p join p.languages l where l.languageName = 'spanish' )", Person.class).getResultList();应该管用。
随时随地看视频慕课网APP

相关分类

Java
我要回答