我有以下实体:
class Person {
int id;
String name;
List<Address> addresses
}
class Address {
int id;
String city;
}
我尝试准备查询(基于Criteria-API),其中结果(结果列表中的每个元组)将包含三个元素:
(1,“Peter”,Collection {2,3})或 (1,“Peter”,Tuple {2,3})
我尝试过这样的事情:
EntityManager em;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = qb.createTupleQuery()
Root<Person> root = cq.from(Person.class);
ListJoin<PersonalData, Address> join = (ListJoin)root.join("addresses", JoinType.LEFT);
cq.multiselect(root.get("id"), root.get("name"), join.get("id"));
TypedQuery<Tuple> tq = em.createQuery(cq);
List<Tuple> result = tq.getResultList();
但收到的结果与预期不同:(
对于模特:人(1,“彼得”)
有两个地址
地址(2,“伦敦”); 地址(3,“巴黎”);
我的结果列表类似于笛卡尔积:
(1,“Peter”,2),(1,“Peter”,3)
是否可以收到本帖子开头要求的结果?
答案 0 :(得分:1)
不,它不能按照您期望的方式工作,因为人和地址之间的连接将导致每行一个地址,JPA将以类似的格式返回数据。每个元组中有一个person.id,person.name,person.address。为什么不直接返回Person实例并使用它?