2016-10-20 7 views
0

я следующие конфигурации:EclipseLink ManyToMany отношение - Список пуст

Класс курса:

@Entity 
public class Course implements Serializable { 

    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "STUDENT_COURSE", 
     joinColumns = {@JoinColumn(name = "ID_COURSE")}, 
     inverseJoinColumns = {@JoinColumn(name = "ID_STUDENT")}) 
    private List<Student> students = new ArrayList<Student>(); 

Класс Student:

@Entity 
public class Student implements Serializable { 

    @ManyToMany(mappedBy = "students", fetch = FetchType.EAGER) 
    private List<Course> courses = new ArrayList<Course>(); 

Im использованием Spring-данных, и проблема заключается в том, что когда я хочу получить объект «Студент», список курсов всегда пуст (даже с FetchType.EAGER):

Выше конфигурации отлично работает с использованием спящего режима. Кто-нибудь знает, в чем проблема? Нужно ли EclipseLink что-то еще? Кроме того, я проверил данные с помощью pgAdmin, и данные сохраняются, как ожидалось.

ответ

0

EclipseLink использует общий кэш включен по умолчанию, поэтому, если вы не заполнили список курсов Студента, когда вы их сохраняли, они останутся в кэше до тех пор, пока они не будут перезагружены. Установите обе стороны вашего двунаправленного отношения (всегда рекомендуется, поскольку JPA НЕ устанавливает их для вас).

Вы можете заставить запросы обновляться с помощью подсказки запроса или отключать общий кеш, если это необходимо. См. https://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F

+0

Благодарим вас, установка работала для меня. Но я действительно не понимаю, что вы подразумеваете под этим: – nbaplaya

+0

«Установите обе стороны вашего двунаправленного отношения (всегда рекомендуется, так как JPA НЕ устанавливает их для вас)». - Не могли бы вы дать более подробную информацию или пример? – nbaplaya