我是Spring的新手,我正在尝试创建我的第一个Spring项目。我想创建查询来获取患者的firstName
和lastName
以及验光师的firstName
和lastName
的预约数据。问题是字段firstName
和lastName
对患者和验光师的命名相同,因为它们是AppUser
的字段。这是数据库表关系图。
AppUser
与Patient
、AppUser
与Optometrist
之间存在@OneToOne
关系。Patient
与Appointment
、Optometrist
与Appointment
之间存在@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
类中的状态实现为Enum
AppointmentStatus
。查询为status
返回AppoitmentStatus
类型,而不是我认为的String
。在我的DTOAppointmentPatientOptometrist
类中,我将status
字段的类型从String
更改为AppointmentStatus
,现在它工作得很好。谢谢大家的帮助