Java Jpa标准表别名
您好,我正在努力使用criteria api编写以下查询: 从货物c、货币c中选择c.id、货币名称 问题在于,根据条件,货物和货币都被别名为c,因此生成的jpql变成“从货物c中选择c.id,c.name,货币c” 我不知道这是否是因为这两个实体都以C开头。 有没有办法更改表别名Java Jpa标准表别名,java,jpa,openjpa,criteria-api,Java,Jpa,Openjpa,Criteria Api,您好,我正在努力使用criteria api编写以下查询: 从货物c、货币c中选择c.id、货币名称 问题在于,根据条件,货物和货币都被别名为c,因此生成的jpql变成“从货物c中选择c.id,c.name,货币c” 我不知道这是否是因为这两个实体都以C开头。 有没有办法更改表别名 CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); CriteriaQuery<Tuple> query=
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Tuple> query= criteriaBuilder.createTupleQuery();
Root<Cargo> cargo= query.from(Cargo.class);
Root<Currency> currency= query.from(Currency.class);
CriteriaBuilder-CriteriaBuilder=getEntityManager().getCriteriaBuilder();
CriteriaQuery=criteriaBuilder.createTupleQuery();
根cargo=query.from(cargo.class);
Root currency=query.from(currency.class);
非常感谢您的帮助。您的代码缺少指定所选内容的部分。从货物c、货币c中选择c.id、货币名称 可能会转化为:
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();
CriteriaBuilder-CriteriaBuilder=getEntityManager().getCriteriaBuilder();
CriteriaQuery=criteriaBuilder.createTupleQuery();
根cargo=query.from(cargo.class);
Root currency=query.from(currency.class);
query.multiselect(cargo.get(“id”)、currency.get(“name”);
Query Query=em.createQuery(cq);
List results=query.getResultList();
这里有一个仅使用一个表的示例:
经过大量调试后,我发现实际执行的jpql与ide(eclipse)中显示的jpql不同。 别名还可以。我想我被ide欺骗了一点。
谢谢大家的关注。和
从Cargo c JOIN Currency curr中选择c.id、curr.name
?检查两个实体的映射规范,并检查它们是否映射到同一个表上。它们映射到不同的表。两个实体的表名不同。实体名不应影响api标准,因为它通常不会被翻译成JPQL(尽管您没有提到提供者)。你得到的SQL是什么,你想得到什么样的结果?“SELECT c.id,curr.name FROM Cargo c,Currency curr”返回了两个表的笛卡尔积,似乎并没有那么有用,这真的是您的应用程序所追求的吗?我使用的是openjpa 2.2.2。这是我在我的原始帖子中得到的SQL:“从货物c中选择c.id,c.name,货币c”。关键是,这两个实体的别名为“c”。当我使用一个实体时,没有问题。两个或多个以不同字母开头的实体没有问题。但是当它们以我的帖子中的相同字母开头时,则oops!。可能别名是从实体名称的首字母中选择的。可能。您是否尝试按照建议修复查询,并得到相同的结果?JPQL查询发生了什么?是的,我做了。得到了相同的结果。我可以确认表别名是从实体名称的第一个字母中选择的。