0

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 の両方のバージョンが必要です。助けてください!

4

1 に答える 1