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

Spring JPA findByUsername方法执行SQL语句报错求助

问题排查与解决方案

针对你开发餐饮评论API时遇到的两个问题:自定义findByUsername方法SQL语法错误、请求JSON中username拼写错误不报错但字段为null,给出以下排查和解决步骤:


一、解决SQL语法错误

1. 校验Repository方法与Model字段的匹配性

Spring Data JPA的方法命名依赖Model字段名,确保:

  • Model类中存在完全匹配的username字段(大小写一致,比如不要Model里是userName,方法写findByUsername)
  • 如果数据库列名和Model字段名不一致,用@Column注解明确映射:
@Column(name = "user_name") // 对应数据库列名
private String username;

2. 打印SQL语句定位错误

在配置文件中开启SQL日志,直接查看自动生成的SQL哪里有语法问题:

# application.properties
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

通过日志可以直观看到列名拼写、关键字冲突等问题,比如是否出现了数据库不允许的关键字,或者列名错误。

3. 改用手动SQL查询(可选)

如果自动生成的SQL有问题,直接用@Query注解写原生或JPQL语句:

// JPQL写法
@Query("SELECT u FROM User u WHERE u.username = :username")
User findByUsername(@Param("username") String username);

// 原生SQL写法(如果需要)
@Query(value = "SELECT * FROM user WHERE username = :username", nativeQuery = true)
User findByUsername(@Param("username") String username);

二、解决字段拼写错误不报错的问题

默认Jackson会忽略未知字段,导致拼写错误的字段不会触发报错,而是将正确字段设为null,可以通过以下方式开启严格校验:

1. 全局配置

在application.properties中添加:

spring.jackson.deserialization.fail-on-unknown-properties=true

这样请求JSON中出现Model没有的字段时,会直接抛出JsonMappingException,快速定位拼写错误。

2. 局部配置(针对单个Model)

如果不想全局开启,在Model类上添加注解:

@JsonIgnoreProperties(ignoreUnknown = false)
public class User {
    private String username;
    // 其他字段、getter/setter
}

额外检查点

  • 确认请求的Content-Type头是application/json,否则Spring MVC无法正确解析JSON参数
  • 确保Model类的username字段有正确的getter和setter方法,属性绑定依赖这些方法

内容的提问来源于stack exchange,提问作者Jboyd34

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:15