如何在Spring JPA存储库中连接具有相同列名的多个表的结果



我是Spring的新手,我正在尝试创建我的第一个Spring项目。我想创建查询来获取患者的firstNamelastName以及验光师的firstNamelastName的预约数据。问题是字段firstNamelastName对患者和验光师的命名相同,因为它们是AppUser的字段。这是数据库表关系图。

AppUserPatientAppUserOptometrist之间存在@OneToOne关系。PatientAppointmentOptometristAppointment之间存在@OneToMany关系

我想要检索的DTO:

@AllArgsConstructor
@NoArgsConstructor
@Data
public class AppointmentPatientOptometrist {
private String patientFirstName;
private String patientLastName;
private String optometristFirstName;
private String optometristLastName;
private String status;
}

My AppointmentsRepository和我尝试创建的查询(我尝试使用"as")在查询中解决一个同名问题):

public interface AppointmentRepository extends JpaRepository<Appointment,Long> {

@Query(value="SELECT new com.mypackage.dto.AppointmentPatientOptometrist"+
"(up.firstName as patientFirstName, up.lastName as patientLastName, uo.firstName as optometristFirstName, " +
"uo.lastName as optometristLastName, a.status)" +
" FROM Appointment a  join a.patient p join a.optometrist o join o.appUser uo join p.appUser up")
Page<AppointmentPatientOptometrist> loadAppointments(Pageable pageable);

}

如有任何建议,我将不胜感激。

谢谢。上面的查询没问题。问题的原因是我已经将Appointment类中的状态实现为EnumAppointmentStatus。查询为status返回AppoitmentStatus类型,而不是我认为的String。在我的DTOAppointmentPatientOptometrist类中,我将status字段的类型从String更改为AppointmentStatus,现在它工作得很好。谢谢大家的帮助

最新更新