我有以下配置:
课程:
@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>();
班级学生:
@Entity
public class Student implements Serializable {
@ManyToMany(mappedBy = "students", fetch = FetchType.EAGER)
private List<Course> courses = new ArrayList<Course>();
我使用Spring-data,问题是当我想获取Student对象时,课程列表总是空的(即使使用FetchType.EAGER):
studentRepository.findByFirstName("Name").get(0).getCourses().size() == 0
以上配置与hibernate的使用完美配合。有谁知道这里有什么问题吗? EclipseLink需要更多东西吗?此外,我使用pgAdmin验证了数据,并按预期保存了数据。
答案 0 :(得分:0)
EclipseLink使用默认启用的共享缓存,因此如果在持久化时没有填充学生的课程列表,它们将在缓存中保持这种状态,直到它们被重新加载。设置双向关系的两侧(始终建议,因为JPA不会为您设置它们)。
您可以使用查询提示强制查询,或者根据需要禁用共享缓存。看到 https://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F