【问题标题】:java.sql.SQLSyntaxErrorException: Unknown column 'f.departureCity' in 'where clause'java.sql.SQLSyntaxErrorException:“where 子句”中的未知列“f.departureCity”
【发布时间】:2026-02-18 03:05:02
【问题描述】:

我正在按照一些教程进行 Spring Boot 项目。我无法解决上述问题我尝试了一切。请帮帮我

Bean 类

@Entity
@Table(name="flight")
public class Flight {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "Flight_Number")
private String flightNumber;

@Column(name = "Operating_Airlines")
private String operatingAirlines;

@Column(name = "Departure_City")
private String departureCity;

@Column(name = "Arrival_city")
private String arrivalCity;

@Column(name = "Date_Of_Departure")
private Date dateOfDeparture;

@Column(name = "Estimated_Departure_Time")
private Timestamp estimatedDepartureTime;
//getters and setters
}}

存储库

public interface FlightRepository extends JpaRepository<Flight, Long> {

@Query(value = "select * from flight f where f.departureCity =:departureCity and f.arrivalCity =:arrivalCity and f.dateOfDeparture =:dateOfDeparture ", nativeQuery = true)
List<Flight> findFlights(@Param("departureCity") String from, @Param("arrivalCity") String to,
        @Param("dateOfDeparture") Date departureDate);
}

数据库

create table flight
(
Id int not null auto_increment,
Flight_Number varchar(20) not null,
Operating_Airlines varchar(20) not null,
Departure_City varchar(20) not null,
Arrival_city varchar(20) not null,
Date_Of_Departure date not null,
Estimated_Departure_Time timestamp default current_timestamp,
primary key (Id)
)

我在“where 子句”中得到未知列“f.departureCity”。

【问题讨论】:

  • 你在数据库中的列名为Departure_City,所以我猜,查询必须是...where f.Departure_City =:departureCity...
  • 感谢它的工作。但德哈尔只是想知道。如果我使用 @Columnm 注释将我的变量映射到列名,那么它也可以使用该名称。请清除此
  • 您的映射看起来不错,有什么问题?
  • 使用nativeQuery = true,实体上的映射不适用:查询按原样发送到数据库服务器,没有任何映射。

标签: java spring spring-mvc spring-boot spring-data-jpa


【解决方案1】:

在这种情况下,您应该像直接将查询写入数据库一样编写查询,因为@Query 标记为本机。因此,请参考脚本中定义的字段来创建表。

'f.Departure_City' 而不是'f.departureCity' 等等...

【讨论】:

  • 感谢它的工作。但瓦伦丁只想知道。如果我使用 @Column 注释将我的变量与列名映射,那么它也可以使用该名称。请清除此
  • 您需要从@Query 注释中删除nativeQuery = true 标志。这将允许使用 jpa 使用您的实体别名来引用表列
【解决方案2】:

我认为您必须在查询中更改文件名并再次执行

所以把dateOfDeparture改成Date_Of_Departure就可以了

【讨论】: