级联持久性 'field list' 中的未知列
Unknown column in 'field list' in cascading persistance
我正在使用 Spring 引导版本 2.5.2,spring 数据 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;
}
当我尝试保存(时间表和时间表日)时,对于时间表日 table,休眠是
生成错误的列。
[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) values (?, ?, ?)
[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] 作为 [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] 作为 [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] 作为 [INTEGER] - [18]
[2m2021-11-05 18:29:44.148[0;39m [33m 警告[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,SQL状态: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 'field list'
中的未知列 'timesheet_id'
由于生成的列名是timesheet_id,所以是行不通的。
如果生成的列名变成timesheetid就可以了
请帮忙解决这个问题
您需要添加 @JoinColumn
注释以在您的 TimesheetDay
实体中专门提供列名称值。
@ManyToOne
@JoinColumn(name="timesheetid")
private Timesheet timesheet;
我正在使用 Spring 引导版本 2.5.2,spring 数据 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;
}
当我尝试保存(时间表和时间表日)时,对于时间表日 table,休眠是 生成错误的列。
[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) values (?, ?, ?) [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] 作为 [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] 作为 [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] 作为 [INTEGER] - [18] [2m2021-11-05 18:29:44.148[0;39m [33m 警告[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,SQL状态: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 'field list'
中的未知列 'timesheet_id'由于生成的列名是timesheet_id,所以是行不通的。 如果生成的列名变成timesheetid就可以了
请帮忙解决这个问题
您需要添加 @JoinColumn
注释以在您的 TimesheetDay
实体中专门提供列名称值。
@ManyToOne
@JoinColumn(name="timesheetid")
private Timesheet timesheet;