java.sql.SQLSyntaxErrorException:未知列
Posted
技术标签:
【中文标题】java.sql.SQLSyntaxErrorException:未知列【英文标题】:java.sql.SQLSyntaxErrorException: Unknown column 【发布时间】:2021-11-30 21:45:13 【问题描述】:我正在学习 Spring Boot。 我想参考 mysql 数据并在 Thymeleaf 中显示 MySQL 数据。 但是,我收到以下错误:
'字段列表'中的'employee0_.department_department_id'。
另外,我想设置为从 Employee 类引用 Department 类。 (@ManyToOne) 但我不确定当前的 Entity 类和 MySQL 设置是否正确。
员工控制器
package com.example.demo.controller;
@RequiredArgsConstructor
@Controller
public class EmployeeController
private final EmployeeRepository emRepository;
private final DepartmentRepository deRepository;
@GetMapping("/")
public String showList(Model model)
model.addAttribute("employeeList", emRepository.findAll());
return "index";
@GetMapping("/add")
public String addEmployee(@ModelAttribute Employee employee, Model model)
model.addAttribute("departmentList", deRepository.findAll());
return "form";
@PostMapping("/save")
public String process(@Validated @ModelAttribute Employee employee, BindingResult result)
if (result.hasErrors())
return "form";
emRepository.save(employee);
return "index";
@GetMapping("/edit/id")
public String editEmployee(@PathVariable Long id, Model model)
model.addAttribute("employee", emRepository.findById(id));
return "form";
@GetMapping("/delete/id")
public String deleteEmployee(@PathVariable Long id)
emRepository.deleteById(id);
return "redirect:/";
部门
package com.example.demo.model;
@NoArgsConstructor
@Getter
@Setter
@Entity
public class Department
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="department_id")
private Long department_id;
@NotBlank
@Size(max = 40)
@Column(name="department_name")
private String department_name;
public Department(String name)
this.department_name = name;
员工
package com.example.demo.model;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
public class Employee
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Size(max = 40)
private String name;
@ManyToOne
private Department department;
部门存储库
package com.example.demo.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.model.Department;
public interface DepartmentRepository extends JpaRepository<Department, Long>
EmployeeRepository
package com.example.demo.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.model.Employee;
public interface EmployeeRepository extends JpaRepository<Employee, Long>
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Employee List</title>
</head>
<body>
<h3>List</h3>
<div th:if="$employeeList.size==0">
<h3>no data</h3>
</div>
<table th:if="$employeeList.size()>0">
<tr>
<th>id</th>
<th>name</th>
<th>Department</th>
<th></th>
</tr>
<tr th:each="employee:$employeeList" th:object="$employee">
<td th:text="$employee.id"></td>
<td th:text="$employee.name"></td>
<td th:text="$employee.department_name"></td>
<td><form th:action="@'/delete/'+$employee.id" method="post">
<button>delete</button>
</form></td>
<td><form th:action="@'/edit/'+$employee.id" method="post">
<button>edit</button>
</form></td>
</tr>
</table>
<h3>
<a th:href="@/add">add</a>
</h3>
</body>
</html>
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/spring_crud
spring.datasource.username=spring_crud
spring.datasource.password=spring_crud
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.jpa.hibernate.ddl-auto=update
【问题讨论】:
在您的员工类中,我认为您需要添加@JoinColumn(name = "department_id") 并且您应该在外键选项卡中添加department_id 作为外键。 我添加了@JoinColumn
。它工作正常!谢谢!
【参考方案1】:
您可能想尝试在 Employee 类的部门数据下添加注释 @JoinColumn(name = "department_id")
。或者更多细节,例如,
@Entity
public class Employee
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Size(max = 40)
private String name;
@ManyToOne(targetEntity = Department.class)
@JoinColumn(name = "department_id", referencedColumnName = "department_id")
private Department department;
另外,我建议不要在您的员工类(也在数据库中)使用department_name
列。您可以在获取数据后使用 getter 获取属性。例如employee.getDepartment().getDepartment_name()
.
【讨论】:
这工作正常。谢谢!但是,获得部门的名称并没有奏效。当<td th: text = "$ employee.department">
或<td th: text = "$ employee.getDepartment ()">
时,部门名称为“com.example.demo.model.Department”。显示@5d9db059",当代码为<td th: text = "$ employee.getDepartment (). GetDepartment_Name ()">
时出错。"org.thymeleaf.exceptions.TemplateInputException" 是否需要在Employee类中添加代码?
你可以试试<td th: text = "$employee.getDepartment().getDepartment_name()">
这工作正常!!非常感谢:D以上是关于java.sql.SQLSyntaxErrorException:未知列的主要内容,如果未能解决你的问题,请参考以下文章