我有两个连接的简单查询:
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页面访问它。有没有其他方法可以在选择中获得此字段?