【发布时间】:2016-02-26 20:40:13
【问题描述】:
在我的实体模型中,User 和 UserGroup 之间存在多对多关系
User 是一个普通的@Entity 类,而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.
您能否告诉我我的代码有什么问题以及如何修复它?
【问题讨论】:
标签: jpa eclipselink jpql