我正在使用jpa-api 2.0-cr-1。(Maven)
我有2个人员和标签。
每个人都可以有多个标签,反之亦然。
现在我想检索属于所有给定标签的所有人
例如
person1标有“tall”,“fat”和“bold”
person2标有“tall”和“thin”
person3标有“tall”和“bold”
现在的问题是,如果
我查询[“tall”,“bold”]
我应该得到[person1,person3]
即我想检索属于所有给定标签的人。
public class Person {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "person_name")
private String personName;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "person_tag", joinColumns = { @JoinColumn(name = "person_id") }, inverseJoinColumns = @JoinColumn(name = "tag_id"))
private Set<Tag> tags;
}
public class Tag {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "person_tag", joinColumns = { @JoinColumn(name = "tag_id") }, inverseJoinColumns = @JoinColumn(name = "person_id"))
private Set<Person> persons;
答案 0 :(得分:0)
如果您正在寻找查询,可以尝试以下方法。 在这里我使用了“tag.name”,而不是id。但如果适合你,你知道如何改变它。
select p from Person p
left join p.tags as t where t.name in ("tall","bold")
group by p having count(p)=2
顺便说一句,我没有测试过。希望它有所帮助。
答案 1 :(得分:0)
Select p from Person p join p.tags t1 join p.tags t2 where t1.name = 'tall' and t2.name = 'bold'
请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#JOIN