Spring Boot Repository按flight_from的ID查询Flights方法问题求解
解决Spring Data JPA关联实体下划线字段的ID查询问题
你的问题出在Spring Data JPA的方法命名规则对下划线的处理上——单个下划线会被当作属性名的分隔符,而你的字段本身就用了下划线flight_from,所以常规写法会被误解析。
给你两个靠谱的解决办法:
严格遵循命名规则,用双下划线分隔关联属性和ID
直接用双下划线明确区分原字段名和关联的ID属性,写法如下:List<Flights> findByFlight_from__Id(Integer id);这里的双下划线是关键:第一个下划线属于你原字段名
flight_from的一部分,第二个下划线是Spring Data JPA用来识别“关联实体的属性”的分隔符,这样框架就能正确识别要查询flight_from这个关联实体的id字段。用@Query注解写JPQL,避开命名规则的坑
如果觉得命名规则太绕,直接写JPQL更直观,完全不用纠结命名:import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; // 在你的Repository接口里添加这个方法 @Query("SELECT f FROM Flights f WHERE f.flight_from.id = :id") List<Flights> findByFlightFromId(@Param("id") Integer id);这种写法直接指定查询逻辑,框架不会再去解析方法名,容错性更高,也更容易维护。
之前你试的几种写法为什么不行?
findByFlight_toId:框架会把flight_to拆成flight和to,试图查询flight属性的toId字段,显然和你的实体结构不匹配;findByFlightToId:框架会把方法名里的FlightTo对应成驼峰命名的字段flightTo,但你实体里的字段是下划线的flight_from,自然匹配不上;findByFlight_to_id:多了一个多余的下划线,框架解析时会混乱,找不到对应的属性。
内容的提问来源于stack exchange,提问作者Aleksso
相关产品推荐
相关产品推荐

