首页 > 解决方案 > SpringBoot JPA MySQL 列名

问题描述

我正在尝试通过 SpringBoot 访问一个简单的 MySQL 存储过程。

桌子

employee(empId int, empName varchar(100), empAddress varchar(1000), primary key (empId, empName))

存储过程

PROCEDURE `get_Employee`(employeeId int)
BEGIN
    select empId,empName,empAddress from employee where empId = employeeId;
END

实体类

@Entity
@Table(name="employee")
public class Employee implements Serializable {

    @Id
    private int empId;
    private String empName;
    private String empAddress;

    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public String getEmpAddress() {
        return empAddress;
    }

    public void setEmpAddress(String empAddress) {
        this.empAddress = empAddress;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Employee{");
        sb.append("empId=").append(empId);
        sb.append(", empName='").append(empName).append('\'');
        sb.append(", empAddress='").append(empAddress).append('\'');
        sb.append('}');
        return sb.toString();
    }
}

SpringBoot 主类

@SpringBootApplication
public class JDBCApplication implements CommandLineRunner {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private EmployeeDAO employeeDAO;

    public static void main(String[] args) {
        SpringApplication.run(JDBCApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        String sql = "SELECT empId,empName,empAddress FROM employee";
        List<Employee> employees = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(Employee.class));
        employees.forEach(System.out::println);

        System.out.println("-----------------");
        employees = employeeDAO.getEmployeeList(1004);
        employees.forEach(System.out::println);

    }
}

当我运行该类时,我收到一个错误,即找不到列“emp_Id”。不知道它是如何得出这个列名的。

同样在运行之后,Employee 表最终添加了 3 个新列。一个新列,每个列都用于现有列,但其中包含“_”。像 emp_Id、emp_Name、emp_Address。它结束成为这个

TABLE `employee` (
  `empId` int NOT NULL,
  `empName` varchar(100) NOT NULL,
  `empAddress` varchar(1000) DEFAULT NULL,
  `emp_id` int NOT NULL,
  `emp_address` varchar(255) DEFAULT NULL,
  `emp_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`empId`,`empName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

这很奇怪,以前从未见过这样的场景。这是我第一次尝试 MySQL DB。这是正常的吗?同样,一旦我将 get_Employee SP 更改为使用“_”引用列,而不是原始列,它就可以正常工作。对此有什么想法吗?TIA

标签: mysqlspring-bootspring-data-jpa

解决方案


您可以显式声明列名应该是什么

    @Id
    @Column( name="empId" )
    private int empId;
    @Column( name="empName" )
    private String empName;
    @Column( name="empAddress" )
    private String empAddress;

您还可以更改 Spring Boot 采用的默认命名策略


推荐阅读