实体Project
有收藏属性contributors
用 @OneToMany
映射与实体的关系 User
@Entity
@Table( name = "projects" )
public class Project {
...
@OneToMany
@JoinTable(name = "project_contributors")
private List<User> contributors = new ArrayList<User>();
...
}
然后我需要检查是否
contributors
已经有 user
与 id
contributorId
在添加之前。我正在尝试使用 HQL 查询,但我显然非常无能。我在尝试什么:
Query query = session.createQuery(
"select p.contributors from Project p where p.id = :pId and p.contributors.id = :cId"
);
query.setParameter("pId", projectId);
query.setParameter("cId", contributorId);
@SuppressWarnings("unchecked")
List<User> res = (List<User>) query.list();
但它给出了错误
illegal attempt to dereference collection [project0_.id.contributors] with element property reference [id]
有没有好心人愿意给我一点插入?
我做的另一个尝试是
"select p.contributors as c from Project p where p.id = :pId and c.id = :cId"
但没什么。
最佳答案
contributors
是一个集合。因此,它没有名为 id 的属性。
Id 是此 Collection 元素的属性。
您可以通过加入集合而不是取消引用来解决问题:
SELECT p
FROM Project pj
JOIN pj.contributors p
WHERE pj.id = :pId
AND p.Id = :cId
关于 hibernate 选择具有给定属性的集合元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734177/