gpt4 book ai didi

hibernate - 如何编写一个 JPA 查询来检查一个集合是否在另一个集合中至少有一个项目?

转载 作者:行者123 更新时间:2023-12-04 04:53:38 25 4
gpt4 key购买 nike

我正在使用 JPA 2.0、Hibernate 4.1.0.Final 和 Spring 3.1.1.RELEASE。我有这个字段的实体......

@Entity
@Table(name = "user")
public class User
{

@ManyToMany
@JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
@LazyCollection(LazyCollectionOption.FALSE)
private Set<Role> roles = new HashSet<Role>();

我想写一个方法

List<User> findUsers(List<Role> roles);

这将返回用户至少具有参数“roles”中的角色之一的用户。我如何在 JPA 中做到这一点?我知道我会写

    final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
final CriteriaQuery<User> criteria = builder.createQuery(User.class);
final Root<User> user = criteria.from(User.class);

criteria.where(user.get("role").in(roles)));
final TypedQuery<User> query = m_entityManager.createQuery(criteria);

如果用户只有一个角色,但在这种情况下用户有一个集合,所以我不知道如何调整上面的。

最佳答案

根据 this answer , 你可以使用 Expression#in()方法,前提是您使用基本属性作为 in 表达式的参数:

Join<User, Role> rolesJoin = user.join("roles");
List<Integer> rolesIds = new ArrayList();
for (Role role : roles) {
rolesIds.add(role.getId());
}
criteria.where(rolesJoin.get("id").in(rolesIds));

希望还有其他方法可以让它发挥作用,但我还没有找到任何其他方法。

关于hibernate - 如何编写一个 JPA 查询来检查一个集合是否在另一个集合中至少有一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067374/

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