Запрос критериев JPA с выбором регистра - PullRequest
0 голосов
/ 17 июня 2020

Я пишу запрос критериев JPA с помощью selectCase

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 варианта выбора.

Но с приведенным выше кодом я получаю null Исключение указателя в entityManager.createQuery(query).

В некоторых случаях я намерен печатать идентификатор и имя topi c, когда идентификатор документа не равен нулю.

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

1 Ответ

0 голосов
/ 19 июня 2020

попробуйте добавить другое:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...