状态字段路径无法解析为集合类型

The state field path cannot be resolved to a collection type

在我的实体模型中,我在 UserUserGroup 之间有一个多对多关系 用户是一个普通的 @Entity class,而 UserGroup 是一个 Java enum.

映射看起来像这样:

@ElementCollection(targetClass = my.package.UserRight.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)    
@CollectionTable(name = "MD_USER_RIGHTS", joinColumns = @JoinColumn(name = "REF_USER_ID"))
@Column(name = "USER_GROUP")
@Getter @Setter private Set<UserRight> userGroups;

一切正常,除非我尝试访问通过 JPQL 设置的用户组。我不想将用户实体的所有信息暴露给下一层,所以我编写了一个简单的 JPQL 查询来从我的用户实体创建一些 DTO:

简化版:

public List<UserDTO> findAllActive() {
    Query q = em.createQuery("SELECT NEW my.package.UserDTO(m.name, m.id, m.userGroups) 
                              FROM User m ");
    return q.getResultList();
}

这会导致以下错误:

Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [SELECT NEW my.package.UserDTO(m.name, m.id, m.userGroups) FROM User m]. 
[83, 95] The state field path 'm.userGroups' cannot be resolved to a collection type.

你能告诉我我的代码有什么问题以及如何解决吗?

这个

为构造函数表达式定义了 JPQL 语法
constructor_item ::= single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable

您不能将多值路径表达式(集合)作为 JPQL 中构造函数的输入参数。 不知道 EclipseLink 消息想表达什么,介意