1

嗨,我正在努力使用标准 api 编写以下查询:“SELECT c.id,curr.name FROM Cargo c, Currency curr”

问题是 Cargo 和 Currency 都按标准别名为 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);

很感谢任何形式的帮助。

4

2 回答 2

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

于 2013-09-13T17:29:17.577 回答
1

经过大量调试,我发现实际执行的 jpql 与我的 ide(eclipse) 中显示的 jpql 不同。别名没问题。我想我有点被 ide 欺骗了。谢谢大家的关注。

于 2013-09-24T13:27:22.403 回答