Запрос прецедента JPA CriteriaBuilder

#jpa #jpa-2.0

#jpa #jpa-2.0

Вопрос:

Кто-нибудь может привести пример того, как написать case-запрос с помощью CriteriaBuilder ?

Ответ №1:

Ниже приведен пример выражения прецедента с использованием CriteriaBuilder (это работает в JPA 2):

 Hashtable caseTable = new Hashtable(3);
caseTable.put("Bob", "Bobby");
caseTable.put("Susan", "Susie");
caseTable.put("Eldrick", "Tiger");
Expression expression = builder.get("firstName").caseStatement(caseTable, "NoNickname").equal("Bobby");
  

Он генерирует следующий SQL запрос:

 "CASE t1.firstName WHEN 'Bob' THEN 'Bobby' WHEN 'Susan' THEN 'Susie' WHEN 'Eldrick' THEN 'Tiger' ELSE 'NoNickname' END = 'Bobby'"
  

Для получения дополнительной информации, пожалуйста, смотрите Выражения прецедента JPA 2.0.

Ответ №2:

Я не смог найти «caseStatement» в JPA 2.0 Criteria API. Кажется, его EclipseLink специфичен. Правильный способ — использовать «builder.selectCase()»

Смотрите раздел «Case Expressions» в Pro JPA 2: Освоение Java Persistence API

Комментарии:

1. Прошу прощения. Обновил ссылку 🙂