Я пишу запрос критериев 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"))