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

How to test if Enum value is in EnumSet using JPQL

我有一个属性如下:

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

TypeFlattener 的要点是我想避免对简单列表进行规范化,所以基本上它将 EnumSet to/from 转换为一个简单的字符串,其逗号分隔值匹配Enum.name()

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

我最好的方法是这样的:

@NamedQuery(
  name="Project.findByType", 
  query="SELECT p FROM Project p WHERE :t IN p.assignableTypes"
)

我要为 :t 传递什么?字符串版本如下?我什至可以这样做吗?

q.setParameter("id", "MAJOR");

转换器在这里无关紧要,因为他只影响数据库表示。下面使用 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();