小编nic*_*ava的帖子

使用 CriteriaBuilder 过滤数据以将枚举值与不工作的文字进行比较

我有一个带有枚举字段的 java 类,

org.example.Importacion {
...
@Enumerated(EnumType.STRING)
  private EstadoImportacion estadoImportacion;

  public static enum EstadoImportacion {
      NOT_VALID, IMPORTED, ERROR, VALID
  }

}
Run Code Online (Sandbox Code Playgroud)

当我使用 CriteriaBuilder 创建查询并尝试比较枚举值时,从过滤器到使用文字的标准构建器,查询的最终结果不会过滤枚举值,因此如果我发送 org.example.Importacion.EstadoImportacion .ERROR 到迭代器方法,结果将不会在最终结果列表上过滤 ERROR。

companyCod 过滤器正常,因此如果我将“COMPANY001”作为 companyCode 发送,则查询构建器会过滤最终结果。

我想知道如何比较查询中的枚举:

   public Iterator<Importacion> iterator (
     long first, 
     long count, 
     String companyCod, 
     org.example.Importacion.EstadoImportacion estado) {

    CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
    CriteriaQuery<Importacion> criteria = cb.createQuery(Importacion.class);
    Root<Importacion> desembolso = criteria.from(Importacion.class);
    criteria.select(desembolso);
    Predicate p = cb.conjunction();
    if(companyCod != null) {

        p = cb.and(p, cb.equal(desembolso.get("codigo"), companyCod));
        //This part works fine!
    }


    if (estado != …
Run Code Online (Sandbox Code Playgroud)

java enums jpa

6
推荐指数
1
解决办法
9925
查看次数

标签 统计

enums ×1

java ×1

jpa ×1