【问题标题】:JPA criteria query with Select Case使用 Select Case 进行 JPA 条件查询
【发布时间】:2020-06-17 14:53:42
【问题描述】:

我正在使用 selectCase 编写 JPA Criteria 查询

CriteriaQuery<Tuple> query = builder.createTupleQuery();
Root<MyEntity> root = query.from(MyEntity.class);
Join document = ...
Join topic = ...


query.multiselect
(
        root.get("id"),
        document.get("id");
        builder.selectCase().when(builder.notEqual(document.get("id"), null), topic.get("id")),
        builder.selectCase().when(builder.notEqual(document.get("id"), null), topic.get("name")),
);
TypedQuery<Tuple> typedQuery = entityManager.createQuery(query);

如果我不应用 2 个选择案例,则查询工作正常。

但是使用上面的代码,我在entityManager.createQuery(query) 得到空指针异常。

我对选择案例的意图是在文档的 id 不为空时打印主题的 id 和名称。

Exception:

java.lang.NullPointerException
    at org.hibernate.query.criteria.internal.predicate.ComparisonPredicate.render(ComparisonPredicate.java:172)
    at org.hibernate.query.criteria.internal.predicate.AbstractSimplePredicate.render(AbstractSimplePredicate.java:48)
    at org.hibernate.query.criteria.internal.Renderable.renderProjection(Renderable.java:34)

请建议我缺少什么。

编辑: 我也试过:

builder.selectCase().when(builder.isNotNull(document), topic.get("id")),
    builder.selectCase().when(builder.isNotNull(document), topic.get("name"))

【问题讨论】:

    标签: java sql jpa criteria


    【解决方案1】:

    尝试添加其他方式:

    builder.selectCase()
        .when(builder.isNotNull(document), topic.get("id"))
        .otherwhise(builder.literal("")), // assuming String is the type returned for the query
    builder.selectCase()
        .when(builder.isNotNull(document), topic.get("name"))
        .otherwhise(builder.nullLiteral(String.class))    // assuming String is the type returned for the query
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多