簡體   English   中英

在 SpringBoot 中加入表時“找不到列”

[英]“Column not found” when joining table in SpringBoot

我是 spring 啟動的新手,現在我正在嘗試加入兩個表,其中一個是復合表(如果它有任何影響,idk)。 請查看我的代碼並幫助我。

員工.java(型號)

@Entity
@Table(name = "employees")
public class Employees {

    @Id
    @Column(name = "emp_no")
    private long emp_no;

    @Column(name = "name")
    private String name;
}

Salaries.java(型號,復合表)

 @Entity @Table(name = "salaries") public class Salaries { @Column(name = "emp_no") //Primary Key private long emp_no; @Column(name = "salary") private int salary; @Column(name = "date") //Primary Key private LocalDate date; }

EmployeeRepo.java(存儲庫)

 public interface EmployeesRepository extends JpaRepository<Employees, Long> { String salary = "SELECT employees.name, salaries.salary FROM employees INNER JOIN salaries ON employees.emp_no=salaries.emp_no LIMIT 0,10"; @Query(value=salary, nativeQuery = true) List<Employees> getUserSalary(); }

EmpController.java(控制器)

 @GetMapping("/salary") public ResponseEntity<List<Employees>> getSalaries(@RequestParam(required = false) String args){ List<Employees> employees = new ArrayList<Employees>(); employeesRepository.getUserSalary().forEach(employees::add); if(employees.isEmpty()){ return new ResponseEntity<>(employees, HttpStatus.NO_CONTENT); } return new ResponseEntity<>(employees, HttpStatus.OK); }

應用程序屬性

 spring.datasource.url= jdbc:mysql://127.0.0.1:3306/employees?useSSL=false spring.datasource.username= "" spring.datasource.password= "" spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto= update

和錯誤信息:

未找到列“emp_no”。

我不明白為什么當我在 db 中的表上都有emp_no列時會出現此錯誤。

我猜你的問題是

 String salary = "SELECT employees.name, salaries.salary FROM employees INNER JOIN salaries ON employees.emp_no=salaries.emp_no LIMIT 0,10";
 @Query(value=salary, nativeQuery = true)
 List<Employees> getUserSalary();

您正在嘗試在只有 emp_no, name 的員工中保存 name,salary。 所以錯誤是你已經映射了名稱,但 emp_no 不能從查詢中獲得。 如下創建 POJO/模型

public class EmpSalary {
    private String name;
    private double salary;
}

然后更新您的存儲庫以返回 EmpSalary

String salary = "SELECT employees.name, salaries.salary FROM employees INNER JOIN salaries ON employees.emp_no=salaries.emp_no LIMIT 0,10";
@Query(value=salary, nativeQuery = true)
List<EmpSalary> getUserSalary();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM