Java项目查询MySQL报错Unknown column 'end' in 'field list'如何解决
问题根因
end属于MySQL的保留关键字,Hibernate默认生成SQL时不会自动给保留关键字做转义处理,导致MySQL将SQL语句里的end识别为语法关键字而非列名,最终抛出字段不存在的错误。
解决方案
- 方案1:仅针对
end字段做转义,修改实体类中end字段的@Column注解,给列名包裹反引号:
@Column(name = "`end`") private DateTime end = new DateTime();
- 方案2:开启全局标识符自动转义,在项目的application配置文件中添加如下配置,让Hibernate自动给所有表名、列名添加转义引号,彻底避免保留关键字冲突问题:
若使用application.properties:
若使用application.yml:spring.jpa.properties.hibernate.globally_quoted_identifiers=truespring: jpa: properties: hibernate: globally_quoted_identifiers: true
其他潜在问题提示
- 当前Repository层的
findActiveWhateverEntities方法声明了两个入参,但写的JPQL语句并没有使用这两个参数,后续如果需要按参数过滤数据需要补充对应的WHERE条件。 - 实体类中关联字段命名为
image,对应的Getter方法为getImage(),但DTO构造方法中调用了whateverEntity.getHeaderImage()会导致运行时报错,需要修改为whateverEntity.getImage(),或者修改实体类字段名为headerImage和业务逻辑保持一致。
内容的提问来源于stack exchange,提问作者krltos
相关产品推荐
相关产品推荐

