You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPQL多表关联查询报错:无法解析FlightEntity的flightName属性

JPQL查询报错:could not resolve property: flightName of: com.flightbook.entity.FlightEntity 排查与解决

报错原因

实体类FlightEntity中定义的航班名字段为**flightname(全小写,字母n未大写),但在Repository层的JPQL查询语句中,你使用了f.flightName**(驼峰式,字母N大写)来引用该字段。

JPQL是基于实体类的属性名称(而非数据库列名)进行查询的,Hibernate无法在FlightEntity中找到名为flightName的属性,因此抛出QueryException。

解决方案

方案1:修改JPQL语句,匹配实体类属性名

直接调整JPQL中的字段引用,与FlightEntity的属性名保持一致:

@Query("SELECT new com.flightbook.model.BookingList(b.bookingId, b.pasengerName, b.status, f.scheduleDate, f.flightname) FROM BookEntity b JOIN b.flightEntity f JOIN b.userEntity u WHERE u.id = ?1")
List<BookingList> getFlightBookingByUserId(Long user_id);

方案2:修改实体类属性名,统一命名风格

如果希望遵循驼峰命名规范,修改FlightEntity的字段名,并可通过@Column注解映射到数据库原列名(避免数据库表结构改动):

public class FlightEntity {
    @Id
    private String flightId;

    // 修改为驼峰命名,同时映射到数据库原列名flightname
    @Column(name = "flightname")
    private String flightName;
    private String from;
    private String to;

    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date scheduleDate;

    @JsonManagedReference("flight")
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "flightEntity")
    private List<BookEntity> bookEntities;
}

修改后,原JPQL中的f.flightName即可正确匹配实体类属性。

内容的提问来源于stack exchange,提问作者Faheem azaz Bhanej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:15:40