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

标签 java enums jpql

我有一个属性如下:

@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/

相关文章:

java - Android 主线程 Looper 关注点

java - JPQL:查询多列时,什么样的对象包含结果列表?

java - JNI Java 使用将对象作为参数的 DLL 函数

java - Hibernate Envers 不使用 SpringMVC 配置在审计表中写入任何内容

c# - C# 和类中的嵌套枚举

基于枚举常量的 Typescript 排序

c# - 通过 TCP 发送枚举值

java - 将查询结果转换为对象

java - 使用 boolean 函数进行选择

java - 无法将调试器附加到 HTTP JVM,而是附加了 AMGR JVM