Jpa Criteria表别名

时间:2013-09-13 11:53:33

标签: java jpa openjpa criteria-api

您好我正在努力用条件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);

非常感谢任何帮助。

2 个答案:

答案 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不同。 别名是好的。我想我有点被骗了。 谢谢你的关注。