【问题标题】:JPQL select query for ElementCollectionElementCollection 的 JPQL 选择查询
【发布时间】:2014-03-22 09:44:50
【问题描述】:

我有以下带有enum 集合的实体。我想使用enum 参数搜索用户。
用户可能拥有多个权限。当我使用Permission.APPROVE 之类的参数搜索用户时,可能有一个或多个用户拥有该权限。 怎么写JPQL查询?

用户.java

@Entity
....
public class User implements Serializable {

    @ElementCollection(targetClass = Permission.class)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "USER_PERMISSION", joinColumns = @JoinColumn(name = "PERMISSION", referencedColumnName = "ID")) 
    private List<Permission> permisssionList;
}

Permission.java

public enum Permission {
    REGISTER, APPROVE, REJECT, CONFIRM;
}

怎么写?

public List<User> findUserList(Permission permission) { 
    Query q = em.createQuery(.....);
    result = q.getResultList();
}

【问题讨论】:

    标签: java jpa jpql


    【解决方案1】:

    @Embeddable@CollectionTable 只是映射一对多关系的一种简单方法,它们不能直接查询也不能持久化,但肯定可以加入,就像处理任何一对多关系一样:

    "select user from User user join user.permissionList p where p = :permission"
    

    并将枚举作为常规参数传递

    【讨论】:

      【解决方案2】:

      来自规范

      枚举文字支持使用 Java 枚举文字语法。这 必须指定完全限定的枚举类名。

      select u from User u where u.Permission = XX.XX.Permission.APPROVE
      

      试试这个。

      String jpql = 
          "select u from User u join u.permission p"
          + " where p = :enumeration";
      Query query = em.createQuery(jpql);
      query.setParameter("enumeration", XX.XX.Permission.APPROVE);
      

      【讨论】:

        猜你喜欢
        • 2014-01-12
        • 2017-08-14
        • 2013-10-23
        • 2017-11-17
        • 1970-01-01
        • 2020-08-27
        • 2015-10-02
        • 2021-08-25
        • 2011-01-17
        相关资源
        最近更新 更多