2014-10-12 1 views
0

У меня есть два объекта, а dept_id - это внешний ключ здесь.ManyToOne выполняет несколько запросов для извлечения записей

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, где у меня есть около 100 параметров внутри in запроса:

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

Когда я вижу в журнале JPA, я нашел это извлечение 100 записей из Student по одному запросу. После этого он выполняет 100 отдельных запросов для получения Department для каждого Student. До сих пор я понимаю, что операция ввода-вывода должна быть медленной. Есть ли способ, чтобы он извлекал все по одному запросу?

+2

и вы попробовали «FETCH JOIN» на студент.департамент? –

+0

Я просто попробовал 'query.setHint (« eclipselink.join-fetch »,« o.department »);« и я думаю, что я смогу продвинуться дальше. –

ответ

0

Я нашел, что это работает для меня:

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

Кроме того, я нашел, что это один очень удобно, так как не делать какие-либо объединения, но получает записи отдельно в объеме.

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

 Смежные вопросы

  • Нет связанных вопросов^_^