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().

【讨论】:

这工作正常。谢谢!但是,获得部门的名称并没有奏效。当&lt;td th: text = "$ employee.department"&gt;&lt;td th: text = "$ employee.getDepartment ()"&gt; 时,部门名称为“com.example.demo.model.Department”。显示@5d9db059",当代码为&lt;td th: text = "$ employee.getDepartment (). GetDepartment_Name ()"&gt;时出错。"org.thymeleaf.exceptions.TemplateInputException" 是否需要在Employee类中添加代码? 你可以试试&lt;td th: text = "$employee.getDepartment().getDepartment_name()"&gt; 这工作正常!!非常感谢:D

以上是关于java.sql.SQLSyntaxErrorException:未知列的主要内容,如果未能解决你的问题,请参考以下文章