我有一些JPA代码让我有些惊愕。有两个对象;患者和PatientUR(标识符)相关如下:
@OneToMany(mappedBy="patient", cascade = CascadeType.ALL, orphanRemoval=true, fetch = FetchType.EAGER)
private List<PatientUR> urs;
@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name="patient_id")
private Patient patient;
我可以在交易中创建患者和患者,并且它们可以正确保留。然而,有时候(一段时间之后)我需要从坚持的患者中检索患者的患者。我用这种方法:
// find patient using an initial reference ur
PatientUR myPatientUR = patientURService.find(ur0); // is there something broken here?
Patient myPatient = myPatientUR.getPatient();
// Modify patient if required
// retrieve all UR's
List<PatientUR> myRegisteredURList = myPatient.getUrs();
问题是myRegisteredURList总是返回一个空列表。患者查找和检索在事务中发生。
不确定我在这里缺少什么?
刚刚修改了代码:
List<PatientUR> myRegisteredURList = patientURService.findByPatient(myPatient);
正确返回 - 即通过PatientID搜索PatientUR而不是从Patient对象中检索PatientUR列表。