回答
IIRC,你可以做一個SELECT o1, o2, o3 FROM EntityA o1, EntityB o2, EntityC o3 WHERE ....
,結果將是一個List<Object[3]>
,其中數組內容將包含o1,o2,o3值。
由於您要求JPA: Query that returns multiple entities
,因此EclipseLink也屬於它。我在這個問題上搜索了EclipseLink。所以這是我的解決方案。希望對你有效。
TypedQuery<Object[]> query = entityManager.createQuery("select p from Post p where p.publisher.pubId= :ID order by p.createdAt desc",
Object[].class);
query.setParameter("ID", publisherID);
然後,您可以遍歷結果對象並相應地轉換它們。
for (Object result : query.getResultList()) {
myList.add((Post) result);
}
你也可以試試這個,
Query query = entityManager.createQuery("select p from Post p where p.publisher.pubId= :ID order by p.createdAt desc");
參考:http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL
如果我需要從2個實體獲取數據說出版商和書籍? – fiddle
這是一個Spring數據樣本,在JPA
//HQL query
@Query("SELECT c,l,p,u FROM Course c, Lesson l, Progress p, User u "
+ "WHERE c.id=l.courseId AND l.id = p.lessonId AND p.userId = u.id AND u.id=:userId AND c.id=:courseId")
public List<Object[]> getLessonsWithProgress(@Param("userId") Integer userId, @Param("courseId")Integer courseId);
然後以同樣的方式但其作品,我稱這種方法並打印結果:
List<Object[]> lst = courseRepository.getLessonsWithProgress(userId, courseId);
for (Object o[] : lst) {
Course c = (Course) o[0];
Lesson l = (Lesson) o[1];
Progress p = (Progress) o[2];
User u = (User) o[3];
//all the classes: Course, Lesson, Progress and User have the toString() overridden with the database ID;
System.out.printf("\nUser: %s \n Lesson: %s \n Progress: %s \n Course: %s",u,l,p,c);
}
輸出@Test是在這裏:
User: com.cassio.dao.model.User[ id=1965 ]
Lesson: com.cassio.dao.model.Lesson[ id=109 ]
Progress: com.cassio.dao.model.Progress[ id=10652 ]
Course: com.cassio.dao.model.Course[ id=30 ]
乾杯
嗨激情,但如果我只想只Coursname,LessionID,ProgressID和用戶名..那麼該怎麼辦?如何處理列表數據。因爲當時這行不能被任何類的情況 –
嗨Utkal,考慮到我的示例代碼,課程,課程,進度和用戶都是對象。您可以在每個類的toString()方法中獲得所需的字符串或整數,使@Override成爲可能。同時,對於這種情況,最好的做法是更改HQL查詢,而不是獲得課程c,您可以這樣做SELECT c.name,l.id,progress.id和u.firstname FROM ...因此,您將得到字符串和整數而不是複雜的對象。 –
- 1. JPA多個實體集合查詢
- 2. JPA本地查詢返回實體與多個表中的字段
- 3. JPA - 與多對多集合分頁查詢返回錯誤的數字實體
- 4. Datanucleus JPA命名查詢返回被刪除的實體
- 5. 如何返回一個查詢多個表的實體
- 6. JPA單元測試 - 返回比以往更多的實體的查詢
- 7. JPA:查詢視圖實體
- 8. JPA JPQL查詢返回null
- 9. 查詢多個實體組
- 10. 跨多個實體查詢
- 11. 查詢實體並返回字典
- 12. UPDATE查詢返回Hibernate實體
- 13. 通過投影查詢返回實體
- 14. JPA @TableGenerator多個實體
- 15. JPA本機查詢的實體繼承
- 16. 實體框架查詢多次返回相同的行
- 17. 合併JPA實體返回舊值
- 18. JPA查詢返回重複的值
- 19. Linq到子查詢的實體查詢返回錯誤
- 20. 從JPQL查詢中返回JPA實體的子集作爲映射數組?
- 21. SQL查詢返回 「子查詢返回多個1行」
- 22. BreezeJs本地查詢返回實體和空實體
- 23. 使用JPA查詢部分實體
- 24. JPA多個查詢加入
- 25. JPA/Hibernate查詢返回陳舊結果
- 26. JPA本機查詢不返回
- 27. JPA命名查詢未返回結果
- 28. JPA查詢返回錯誤結果
- 29. 返回JPA/Ebean查詢作爲整數
- 30. 春天JPA查詢findByNameAndType返回NULL
@約翰:另外,您可以從HQL調用構造函數,所以你也可以做'選擇新的Foo(O1,O2, o3)...'並且獲得列表而不是列表
好的,但是如果我想使用JPA TypedQuery會怎麼樣:myEntityManager.createQuery(「select o1,o2 ...」,) –
AgostinoX
如果你想使用setFirstResult實際上應用於兩個列表的連接?即我想能夠返回一個分頁列表,它是被查詢的兩個實體的結果的連接。 – Thomas