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

CrudRepository调用findById时按name查询而非id的修复咨询

问题说明

调用findById方法时,终端生成的SQL语句为where name=?,需要修改为where id=?。

问题原因及解决方案

核心问题

  1. @Id注解位置错误:你把@jakarta.persistence.Id注解放在了first_name字段上方,导致JPA将first_name识别为主键字段,所以findById会基于这个字段生成查询条件。
  2. Repository泛型类型不匹配:UserRepository继承CrudRepository<User, String>,但实体类的主键Id是Integer类型,泛型类型不一致会引发潜在问题。

修改步骤

  • 将@jakarta.persistence.Id注解移动到Id字段的上方,明确标记主键。
  • 把UserRepository的泛型参数从String改为Integer,和主键类型保持一致。
  • (可选)建议遵循Java驼峰命名规范,将字段名Id改为id,first_name改为firstName等,提升代码可读性。
修改后的代码示例

User实体类

package com.appzat.carpious.models;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name="users")
public class User {
    @Id
    private Integer id;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;

    private String email;

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail(){
        return this.email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName(){
        return this.firstName;
    }
    public String getLastName(){
        return this.lastName;
    }
}

UserRepository接口

package com.appzat.carpious.repositories;
import org.springframework.data.repository.CrudRepository;
import com.appzat.carpious.models.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<User, Integer> {

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:37:15