У меня простой запрос с двумя объединениями:
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. Есть ли другой способ получить это поле в выделении?