Установить выбор типа безопасного запроса JPA 2 с объединениями - PullRequest
0 голосов
/ 12 июля 2011

У меня простой запрос с двумя объединениями:

SELECT p.id, BU.ID, BU.TEXTLANG  as Title FROM PROJEKT P
  JOIN Text BT ON BT.ID = P.TITEL_ID
  JOIN Uebersetzung BU ON BU.TEXT_ID = BT.ID
  WHERE BU.TEXTLANG LIKE '%Spatial%';

Этот запрос должен быть преобразован в типобезопасный запрос, что я пробовал:

final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Projekt> query = criteriaBuilder.createQuery(Projekt.class);
final Root<Projekt> projekt = query.from(Projekt.class);
Join<Projekt, Text> bt = projekt.join(Projekt_.titel);
Join<Text, Uebersetzung> bu = bt.join(Text_.uebersetzungen);
Predicate condition = criteriaBuilder.like(bu.get(Uebersetzung_.textLang),"%Spatial%");
query.where(condition);
query.distinct(true);
query.orderBy(criteriaBuilder.asc(projekt.get(Projekt_.id)));

Моя проблема в том, что я хочу получить поле Uebersetzung_.textLang в качестве выделения. Но когда я пытаюсь добавить выделение к запросу, например:

query.multiselect(bu.get(Uebersetzung_.textLang));

я получаю сообщение об ошибке:

org.apache.openjpa.persistence.OptimisticLockException: Unable to obtain an object lock on "null".

Мне нужно это поле, потому что я хочу получить к нему доступ со страницы jsp. Есть ли другой способ получить это поле в выделении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...