【发布时间】:2021-03-02 16:44:20
【问题描述】:
我有实体 Job 和 worker。 Worker 可以有多个 Jobs
@Entity
public class Worker {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int workerId;
@Column(unique = true)
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "worker", fetch = FetchType.LAZY)
private List<Job> jobs;
public int getWorkerId()
{
return workerId;
}
public void setWorkerId(int aInWorkerId)
{
workerId = aInWorkerId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Job> getJobs() {
return jobs;
}
public void setJobs(List<Job> jobs) {
this.jobs = jobs;
}
@Override
public String toString() {
return "Worker [id=" + workerId + ", name=" + name + ", jobs=" + jobs + "]";
}
}
@Entity
public class Job
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String description;
@Enumerated(EnumType.STRING)
private Status status = Status.CLOSE;
@ManyToOne
@JoinColumn(name="worker_id")
private Worker worker;
@Column(name="creation_time")
@CreationTimestamp
private Timestamp creationTime;
@Column(name="last_update_time")
@UpdateTimestamp
private Timestamp lastUpdateTime;
@Column(name="expiration_time")
private Timestamp expirationTime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public Worker getWorker() {
return worker;
}
public void setWorker(Worker worker) {
this.worker = worker;
}
public Timestamp getCreationTime() {
return creationTime;
}
public void setCreationTime(Timestamp creationTime) {
this.creationTime = creationTime;
}
public Timestamp getLastUpdateTime() {
return lastUpdateTime;
}
public void setLastUpdateTime(Timestamp lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
public Timestamp getExpirationTime() {
return expirationTime;
}
public void setExpirationTime(Timestamp expirationTime) {
this.expirationTime = expirationTime;
}
@Override
public String toString() {
return "Job [id=" + id + ", name=" + name + ", description="
+ description + ", status=" + status + ", worker=" + worker
+ ", creationTime=" + creationTime + ", lastUpdateTime="
+ lastUpdateTime + ", expirationTime=" + expirationTime + "]";
}
}
我正在使用 Spring data rest 和 Spring data jpa,而我的数据库 sql 脚本是
CREATE TABLE `job` (
`id` int NOT NULL AUTO_INCREMENT,
`creation_time` datetime(6) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`expiration_time` datetime(6) DEFAULT NULL,
`last_update_time` datetime(6) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`worker_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FKjdvw5xn9ojaarulg2lh2yrpih` (`worker_id`),
CONSTRAINT `FKjdvw5xn9ojaarulg2lh2yrpih` FOREIGN KEY (`worker_id`) REFERENCES `worker` (`worker_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `worker` (
`worker_id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`worker_id`),
UNIQUE KEY `UK_2r1ixytxcsbyy8korfyf3ylgd` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
使用邮递员,我先创建了Worker
{
"name": "ankit"
}
然后我正在创建工作
{
"name": "job1",
"description": null,
"status": "CLOSE",
"worker": {
"workerId" : 1
}
}
我面临的问题是 workerId 值被忽略并且为空。它正在降低它的价值。可能是什么原因。我是否未能配置双向 oneToMany 关系。 以下是worker_id为null的日志
insert into job (creation_time, description, expiration_time, last_update_time, name, status, worker_id) values (?, ?, ?, ?, ?, ?, ?)
2020-11-19 15:31:28.026 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [2020-11-19 15:31:28.002]
2020-11-19 15:31:28.028 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [null]
2020-11-19 15:31:28.028 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [TIMESTAMP] - [null]
2020-11-19 15:31:28.028 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [TIMESTAMP] - [2020-11-19 15:31:28.002]
2020-11-19 15:31:28.028 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [VARCHAR] - [job1]
2020-11-19 15:31:28.028 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [6] as [VARCHAR] - [CLOSE]
2020-11-19 15:31:28.029 TRACE 10320 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [7] as [INTEGER] - [null]
【问题讨论】:
标签: spring-boot hibernate spring-data-jpa spring-data-rest