我使用EclipseLink作为JPA提供程序.
我想进行查询以获取IDs与在线一个Criteria查询对应的所有名称.
Root<UserAccount> root = criteria.from(UserAccount.class);
List<Selection<?>> select = new ArrayList<Selection<?>>();
for (MyElement element : list) {
Expression<String> firstName = root.get("firstName");
Expression<String> lastName = root.get("lastName");
Expression<Integer> id = root.get("id");
select.add(criteria
.multiselect(
firstName.alias(element.getId() + "_"
+ element.getEntity() + "f"),
lastName.alias(element.getId() + "_"
+ element.getEntity() + "l"))
.where(criteriaBuilder.equal(id, element.getAuthorId()))
.from(UserAccount.class)
.alias(element.getId() + "_" + element.getEntity()));
}
criteria.multiselect(select);
TypedQuery<Tuple> q = em.createQuery(criteria);
for (Tuple t : q.getResultList()) {
for (OverviewEntity element : list) {
System.out.println("////"
+ t.get(element.getId().toString() + "_"+element.getEntity()+"f",
String.class));
Run Code Online (Sandbox Code Playgroud)
通过element.getId() + "_" + element.getEntity() + "f"我打算创建一个唯一的别名.
问题是,我得到的只是null.为什么?我应该如何在一个查询中获取所有这些(以便它不会变得耗时)?
你的代码看起来很困惑而且过于复杂.
JPQL
Select u.firstName, u.lastName, u.id from UserAccount u where u.id in (:ids)
Run Code Online (Sandbox Code Playgroud)
似乎工作,
在标准中,这是,
Root<UserAccount> root = criteria.from(UserAccount.class);
criteria.multiselect(root.get("firstName"), root.get("lastName"), root.get("id"));
criteria.where(criteriaBuilder.in(root.get("id"), criteriaBuilder.parameter("ids"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19344 次 |
| 最近记录: |