我使用的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