我有如下财产:
@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
答案 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();