如何使用 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();
我有一个属性如下:
@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();