首页 > 解决方案 > 级联持久性中“字段列表”中的未知列

问题描述

我正在使用 Spring Boot 2.5.2 版、spring data jpa 和 MySQL 数据库

    CREATE TABLE Timesheet (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `tsYear` VARCHAR(4) NOT NULL,
  `weekNumber` INT NOT NULL,
  `startDate` DATE NOT NULL,
  `endDate` DATE NOT NULL,
   PRIMARY KEY (`id`)
  );
  
CREATE TABLE TimesheetDays (
  `id` INT NOT NULL AUTO_INCREMENT,
  `timesheetId` BIGINT(20) NOT NULL,
  `dayNumber` INT NOT NULL,
  `dayDate` DATE NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `tsdTimesheetId`
    FOREIGN KEY (`timesheetId`)
    REFERENCES Timesheet (`id`)
);



@Entity
@Table(name = "timesheet")
public class Timesheet {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "timesheet")
    private List<TimesheetDay> days = null;

}


@Entity
@Table(name = "timesheetdays")
public class TimesheetDay {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @ManyToOne
    private Timesheet timesheet;


}

当我尝试保存(timesheet 和 timesheetdays)时,对于 timesheetdays 表,hibernate 正在生成错误的列。

[2m2021-11-05 18:29:44.147[0;39m [32mDEBUG[0;39m [35m15036[0;39m [2m---[0;39m [2m[nio-8080-exec-2][0; 39m [36morg.hibernate.SQL [0;39m [2m:[0;39m 插入timesheetdays(daydate,daynumber,timesheet_id)值(?,?,?) [2m2021-11-05 18:29:44.147[0;39m [32mTRACE[0;39m [35m15036[0;39m [2m---[0;39m [2m[nio-8080-exec-2][0; 39m [36mo.h.type.descriptor.sql.BasicBinder [0;39m [2m:[0;39m 绑定参数 [1] as [DATE] - [2017-12-20] [2m2021-11-05 18:29 :44.148[0;39m [32mTRACE[0;39m [35m15036[0;39m [2m---[0;39m [2m[nio-8080-exec-2][0;39m [36mo.h.type.descriptor .sql.BasicBinder [0;39m [2m:[0;39m 绑定参数 [2] as [INTEGER] - [1] [2m2021-11-05 18:29:44.148[0;39m [32mTRACE[0;39m [ 35m15036[0;39m [2m---[0;39m [2m[nio-8080-exec-2][0;39m [36mo.h.type.descriptor.sql.BasicBinder [0;39m [2m:[0 ;39m 绑定参数 [3] as [INTEGER] - [18] [2m2021-11-05 18:29:44.148[0;39m [33m WARN[0;39m [35m15036[0;39m [2m---[0] ;39m [2m[nio-8080-exec-2][0;39m [36mo.h.engine.jdbc.spi.SqlExceptionHelper [0;39m [2m:[0;39m SQL 错误:1054,SQLState:42S22 [2m2021 -11-05 18:29:44。148[0;39m [31mERROR[0;39m [35m15036[0;39m [2m---[0;39m [2m[nio-8080-exec-2][0;39m [36mo.h.engine.jdbc. spi.SqlExceptionHelper [0;39m [2m:[0;39m '字段列表'中的未知列'timesheet_id'

由于生成的列名是 timesheet_id,所以它不起作用。如果生成的列名变成timesheetid,它将起作用。

请帮助解决此问题

标签: spring-boothibernatejpaspring-data-jpa

解决方案


您需要添加@JoinColumn注释以在您的TimesheetDay实体中专门提供列名称值。

@ManyToOne
@JoinColumn(name="timesheetid")
private Timesheet timesheet;

推荐阅读