如何使用JPQL测试枚举值是否在EnumSet中

时间:2017-11-27 22:31:48

标签: java enums jpql

我有如下财产:

@Entity
class Project implements Serializable {
  @Convert(converter = TypeFlattener.class)
  @Column(name = "assignable_types")
  private EnumSet<Type> assignableTypes;

TypeFlattener的要点是我想避免对一个简单列表进行规范化,所以基本上它将EnumSet转换为一个简单的String,其逗号分隔值与{{1}匹配}

现在的问题是如何仅过滤在assignableTypes中具有特定类型的项目?

我最好的方法就是这样:

Enum.name()

我为@NamedQuery( name="Project.findByType", query="SELECT p FROM Project p WHERE :t IN p.assignableTypes" ) 传递了什么? String版本如下?我甚至可以这样做吗?

:t

1 个答案:

答案 0 :(得分:2)

转换器在这里并不重要,因为他只影响数据库表示。使用MEMBER OF的以下查询应该有效。

TypedQuery<Project> query = em.createQuery(
    "SELECT p FROM Project p WHERE :type MEMBER OF p.assignableTypes", Project.class);
query.setParameter("type", Type.ONE);
List<Project> resultMemberOf = query.getResultList();