您好我正在努力用条件api编写以下查询: " SELECT c.id,curr.name FROM Cargo c,Currency curr"
问题是货物和货币都按标准别名为c,因此生成的jpql变为" SELECT c.id,c.name FROM Cargo c,Currency c"。
我不知道是不是因为两个实体都以C开头。 有没有办法打乱表别名?
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Tuple> query= criteriaBuilder.createTupleQuery();
Root<Cargo> cargo= query.from(Cargo.class);
Root<Currency> currency= query.from(Currency.class);
非常感谢任何帮助。
答案 0 :(得分:1)
您的代码缺少指定所选内容的部分。 “SELECT c.id,curr.name FROM Cargo c,Currency curr” 可能会转化为:
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Tuple> query= criteriaBuilder.createTupleQuery();
Root<Cargo> cargo= query.from(Cargo.class);
Root<Currency> currency= query.from(Currency.class);
query.multiselect(cargo.get("id"), currency.get("name"));
Query query = em.createQuery(cq);
List<Tuple> results = query.getResultList();
这里有一个例子,只使用一个表: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#Tuple_Queries
答案 1 :(得分:1)
经过大量调试后,我发现执行的实际jpql与我的ide(eclipse)中显示的jpql不同。 别名是好的。我想我有点被骗了。 谢谢你的关注。