gpt4 book ai didi

java - JPQL 元素集合 : getting all users which have at least one role of a list

转载 作者:行者123 更新时间:2023-12-01 06:19:48 24 4
gpt4 key购买 nike

一个用户可以扮演多种角色。我想从参数列表中获取至少具有一个角色的所有用户。

数据定义如下:

@Entity
public class User implements Serializable {
@Id
@Column(name = "Id",
nullable = false)
private long id;

@Column(name = "LoginName",
length = 30,
unique = true,
nullable = false)
private String loginName;

@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "Role",
joinColumns = @JoinColumn(name = "Id"),
uniqueConstraints = @UniqueConstraint(columnNames = {"Id", "Role"}))
@Column(name = "Role")
private Set<RoleType> roles = new HashSet<RoleType>();
}


public enum RoleType {
GUEST,
ACCOUNTING,
ADMIN,
OPERATOR;
}

现在我想要所有在参数列表中至少具有一个角色的用户。该列表可以是动态的。我尝试了以下代码:

String sql = "SELECT DISTINCT u FROM User u JOIN u.roles AS r WHERE r IN :filteredRoles";
Query query = entityManager.createQuery(sql);
List<RoleType> filteredRoles = new ArrayList<RoleType>();
filteredRoles.add(RoleType.ADMIN);
filteredRoles.add(RoleType.ACCOUNTING);
query.setParameter("filteredRoles", filteredRoles);
List<User> result = (List<User>) query.getResultList();

并收到以下异常:

Exception [EclipseLink-6078] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.QueryException
Exception Description: The class of the argument for the object comparison is incorrect.
Expression: [null]
Mapping: [org.eclipse.persistence.mappings.DirectCollectionMapping[roles]]
Argument: [[ADMIN, ACCOUNTING]]
Query: ReadAllQuery(referenceClass=User sql="SELECT DISTINCT t0.Id FROM User t0, Role t1 WHERE ((t1.Role IN ?) AND (t1.Id = t0.Id))")

我尝试了 JPQL 的几种变体,但没有成功。我希望收到有用的提示。

最佳答案

您可以尝试 2.4 版本吗,这似乎已修复。

关于java - JPQL 元素集合 : getting all users which have at least one role of a list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554337/

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