SpringBoot JPA MySQL Column names



我正试图通过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数据库。这正常吗?此外,一旦我将get_Employe SP更改为引用带有"_"的列,而不是原始列,它就可以正常工作。对此有什么想法吗?TIA-

您可以使用显式声明列名

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

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

最新更新