当我保存子对象并尝试再次获取父对象时,我没有得到关联的子对象。我正在使用SpringJPA,并且我遵循一对多的关系。
class ClassRoom {
@Id
private Integer classId;
OneToMany(mappedBy="classRoom", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Student> students;
}
class Student {
@Id
private Integer studentId;
@Column(name="class_room_id", insertable = false, updateable = false)
private Integer classRoomId;
ManyToOne
JoinColumn(name = "class_room_id", referencedColumnName="class_room_id")
private ClassRoom classRoom;
}
即使我使用ClassRoomRepository.findOne(classRoomId),它仍然只返回一个类。我相信它的预期行为,因为它返回缓存的实例。有没有办法强制JPA获取所有关联。我甚至试图在两个单独的事务中进行保存和获取,但我仍然得到相同的错误。
有人可以指导我如何执行此操作,因为我认为这是一种常见的用例场景吗?
更新: 以下是调用这些事务的代码
class StudentProxy {
public void saveAndLoadStudent() {
studentService.saveStudent();
studentService.loadClassRoom();
}
}
class StudentService {
@Transactional
public void saveStudent() {
studentRespository.save(student);
}
@Transactional
public void loadClassRoom() {
ClassRoom classRoom = classRoomRepository.findOne(classRoomId);
// classRoom has no students in it.
}
答案 0 :(得分:0)
您没有发布ClassRoom
实际获得Student
的方式。但是可能会发生一个常见的错误:
如果您更改Student
中ClassRoom
的设置,则不会保存,因为该关系由Student
方控制。
除了JPA不应该使用缓存实例,如果你启动一个新的事务,假设你没有配置二级缓存,甚至应该失效。