gpt4 book ai didi

hibernate 选择具有给定属性的集合元素

转载 作者:行者123 更新时间:2023-12-04 16:27:01 29 4
gpt4 key购买 nike

实体Project有收藏属性contributors@OneToMany 映射与实体的关系 User

@Entity
@Table( name = "projects" )
public class Project {
...

@OneToMany
@JoinTable(name = "project_contributors")
private List<User> contributors = new ArrayList<User>();

...
}

然后我需要检查是否 contributors已经有 userid 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com