简体   繁体   English

JPA 条件查询与 Select 案例

[英]JPA criteria query with Select Case

I'm writing JPA Criteria query with selectCase我正在使用 selectCase 编写 JPA 条件查询

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);

The query works fine if I do not apply the 2 select cases.如果我不应用 2 select 案例,则查询工作正常。

But with above code I'm getting null pointer exception at entityManager.createQuery(query) .但是使用上面的代码,我在entityManager.createQuery(query)处得到 null 指针异常。

My intention with select cases is to print topic's id & name when document's id is not null.我对 select 案例的意图是在文档 ID 不是 null 时打印主题的 ID 和名称。

Exception : 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)

Please suggest what am I missing.请建议我错过了什么。

Edit: I've also tried:编辑:我也试过:

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

try add otherwhise:尝试添加其他方式:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM