2014-10-12 33 views
0

我有兩個實體,並且dept_id是這裏的外鍵。多對一做多個查詢獲取記錄

public class Student implements Serializable { 
    ... 
    @Id 
    @Column(name="id") 
    private Integer id; 

    @ManyToOne 
    @JoinColumn(name = "dept_id") 
    private Department department; 
    ... 
} 

public class Department implements Serializable { 
    ... 
    @Id 
    @Column(name="id") 
    private Integer id; 

    @Column(name = "name") 
    private String name; 
    ... 
} 

現在我做了以下JPQL在那裏我有內部in查詢各地的100個參數:

select o from Student o where o.id in(1,2,7,9,15,16, ...) 

當我看到了JPA的日誌,我發現它是通過一個查詢取出由Student 100條記錄。之後,它是做100個單獨的查詢來獲取Department每個Student。到目前爲止,我的理解是I/O操作應該很慢。有什麼辦法可以通過單個查詢獲取所有內容嗎?

+2

並且您在student.department上試過了「FETCH JOIN」? – 2014-10-12 09:37:38

+0

我只是想'query.setHint(「eclipselink.join取」,「o.department」);',我想我可以用這個進一步的進展。 – 2014-10-12 10:11:34

回答

0

我發現這個工作對我來說:

query.setHint("eclipselink.join-fetch", "o.department"); 

另外,我發現這個人是方便,因爲它沒有任何的加盟,但在批量單獨提取的記錄。

query.setHint("eclipselink.batch", "o.department");