我有以下实体:
class Person {
int id;
String name;
List<Address> addresses
}
class Address {
int id;
String city;
}
我尝试准备查询(基于 Criteria-API),其中结果(结果列表中的每个元组)将包含三个元素:
- 个人身份
- 人名
- person.addresses <-- 包含 0 个或更多元素的集合
(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, "彼得", 2), (1, "彼得", 3)
是否有可能收到本文开头要求的结果?