我有两个实体:
- 工程师 - 有一组标签(比如技能集 - Java. .NET 等)
- 标签
工程师可能有任意数量的标签。并且标签与任意数量的工程师相关联。
@Entity
public class Engineer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(nullable = false, length = 12)
private String id;
@Column(length = 100)
private String name;
@OneToMany(fetch = FetchType.EAGER)
List<Tag> tags;
/* Getters and Setters */
}
@Entity
public class Tag implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int id;
@Column(length = 50)
private String name;
/* Getters and Setters */
}
现在,我想查询具有与其关联的标签列表的工程师。例如 - “查询带有标签‘Java’、‘Opensource’和‘Banking’的工程师”。查询应返回具有与其关联的所有标签的工程师。
我可以查询一个标签:
public List<Engineer> searchMindsByTags(String tag) {
Query q = em.createQuery("SELECT e FROM Engineer e WHERE '" + tag
+ "' = ANY(SELECT tag.name FROM e.tags tag)");
return (List<Engineer>) q.getResultList();
}
我需要的是:
public List<Engineer> searchMindsByTags(List<String> tags) {
/* Which query goes here? */
}
是否有一个查询可以完成这项工作,或者我们是否需要逐步迭代结果以进行过滤?