使用连接设置类型安全JPA 2查询的选择

时间:2011-07-12 07:28:03

标签: join jpa-2.0 type-safety

我有两个连接的简单查询:

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页面访问它。有没有其他方法可以在选择中获得此字段?

0 个答案:

没有答案