我有一个属性如下:
@Entity
class Project implements Serializable {
@Convert(converter = TypeFlattener.class)
@Column(name = "assignable_types")
private EnumSet<Type> assignableTypes;
TypeFlattener
的要点是我想避免简单列表的标准化,因此基本上它将 EnumSet
与具有逗号分隔值的简单字符串相互转换匹配Enum.name()
现在的问题是如何仅过滤在 allocateableTypes 中具有特定类型的项目?
我最好的方法是这样的:
@NamedQuery(
name="Project.findByType",
query="SELECT p FROM Project p WHERE :t IN p.assignableTypes"
)
我应该为 :t
传递什么? String版本如下?我可以这样做吗?
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();
关于java - 如何使用 JPQL 测试 Enum 值是否在 EnumSet 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47520947/