3
我有以下實體:標準API - 多選 - 元組包含其他元組/收藏
class Person {
int id;
String name;
List<Address> addresses
}
class Address {
int id;
String city;
}
我嘗試準備查詢(基於標準的API),其中的結果(在結果列表中的每個元組)將包含三個要素:
- persron.id
- PERSON.NAME
- person.addresses < - 收集與0或多個元素
(1, 「彼得」,集合{2,3})或 (1, 「彼得」,元組{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,「London」); 地址(3,「Paris」);
我的結果列表是像笛卡爾乘積:
(1, 「彼得」,2),(1, 「彼得」,3)
是可以接受其請求的結果這篇文章的開頭?
我的域實體包含一些不應該暴露給其他系統組件的邏輯。因此我嘗試生成類似動態DTO的東西。想要了解數據模型的每個組件都可以調用方法,該方法將返回有關所選實體的選定信息。 – user2808522
好像你有一個完美的對象模型,可以被用來代表你的數據而不是專門用於一個目的的業務邏輯。無論如何,雖然它不是您想要的答案,但我認爲您不會找到使用JPA查詢的方式來獲取不帶返回實體的集合集合。 – Chris
很明顯,商業模式並不好,但我無法改變它。應用程序是巨大的,這是我試圖圍繞此模型分離模型和組件的原因。我想到的第一個想法就是在我的模型的頂部準備DTO。似乎使用標準API的方法不能解決我的問題。我會嘗試使用JPA查詢。感謝您的迴應傢伙。 – user2808522