我在使用 JPA2/Hibernate 4.2/MySQL 5.1/Java 6 时遇到问题
我有以下类 User,它有一个属性 ,Set<Role>
其中 Role 是一个枚举。这是课程:
@Entity
public class User
{
private static final long serialVersionUID = 1L;
@ElementCollection(fetch=FetchType.EAGER)
@Enumerated(value=EnumType.STRING)
protected Set<Role> roles;
// .. other stuff
}
public enum Role { ADMIN, OPERATOR, ... }
我已经尝试为此创建一个 CriteriaQuery 和一个 JPQL 查询,但由于某种原因,即使角色存在,它们每次都返回一个空列表。
这是我的条件查询代码:
CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
Root<User> root = query.from(User.class);
query.where(builder.isMember( Role.ADMIN, root.<Set<Role>>get( "roles" ) ) );
List<User> result = getEntityManager().createQuery(query).getResultList();
这是我正在创建的 JPQL:
String jpql = "SELECT * FROM com.mypackage.user.User WHERE (:roles1 MEMBER OF roles))";
Query query = em.createQuery(jpql);
query.setParameter( "roles1", Role.ADMIN );
List result = em.getResultList();
users 表包含具有所有角色的单个用户,但这些都没有返回任何结果。对于我正在做的工作,我需要同时拥有 JPA 和 JPQL 版本。请帮忙!