Spring Boot JPA查询外键关联表时报invalid reference to FROM-clause错误如何解决
问题原因
你开启了原生SQL查询(nativeQuery=true),但查询语句里用了JPQL才支持的实体属性导航写法room.hospital.idhospital,原生SQL只能识别数据库表的实际字段,无法识别实体类的关联属性,所以触发了报错。
另外从你的需求来看,只需要根据医院ID查询对应房间,完全不需要关联hospital表查询,room表本身就存在你在@JoinColumn中定义的外键字段idhospital,直接过滤该字段即可。
解决方案1:改用JPQL查询(推荐,适配JPA实体关联逻辑)
关闭原生查询,用JPQL语法书写,自动适配实体关联映射:
// 直接返回完整Room实体 @Query(value = "select r FROM room r WHERE r.hospital.idhospital = :idhospital") List<Room> findRoomsByHospital(@Param("idhospital") Long hospital); // 如果只需要idroom和roomnumber字段,可以用以下写法 @Query(value = "select r.idroom, r.roomnumber FROM room r WHERE r.hospital.idhospital = :idhospital") List<Object[]> findSimpleRoomsByHospital(@Param("idhospital") Long hospital);
解决方案2:修正原生SQL写法
如果必须使用原生SQL,直接查询room表的外键字段即可,不需要关联hospital表:
@Query(nativeQuery=true, value="select idroom, roomnumber FROM room WHERE idhospital = ?1") List<Room> findRoomsByHospital(@Param("idhospital") Long hospital);
如果后续需要关联查询hospital的其他字段,修正关联条件即可:
@Query(nativeQuery=true, value="select r.idroom, r.roomnumber FROM room r JOIN hospital h ON h.idhospital = r.idhospital WHERE h.idhospital = ?1") List<Room> findRoomsByHospital(@Param("idhospital") Long hospital);
内容的提问来源于stack exchange,提问作者myproton
相关产品推荐
相关产品推荐

