我使用的EclipseLink作为JPA提供商。JPA多选
我希望做一个查询来获取我的一切,对应于某些IDs
与网上一个条件查询的名称。
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));
通过element.getId() + "_" + element.getEntity() + "f"
我打算创建一个唯一的别名。
的问题是,我得到的是null
。为什么?我应该如何在一个查询中获得所有这些信息(以便它不会耗时)?
为什么要创建的(唯一的)别名?什么是element.getEntity()? – perissf 2012-02-08 11:25:02
@perissf这个想法是,当我得到结果时,我想知道所有结果都适合在哪里。 'ID'还不够,还有更多'@Transient'(不在数据库中)信息。 – Dragos 2012-02-08 12:04:46
这个设计看起来很复杂。我会写一个简单的查询,返回给定集合中所有UserAccount记录的Id。该resultList会附着PersistenceContext,你就可以得到您的瞬态性能没有任何努力......没有必要使用别名 – perissf 2012-02-08 12:59:23