【发布时间】:2020-10-14 06:56:25
【问题描述】:
我想将行保存在一个包含其他两个实体 ID 的简单表中。经过一番尝试,我得出了以下配置。 Spring Boot 现在可以正确创建表,列名 task_run_id 和 project_id。
但是当我调用repo.save(participant) 时,会创建一行,但两列都包含 0,而不是所需的 ID。不会抛出任何错误。
我做错了什么? 另外,如果有一些声明对于实现简单的保存和稍后查询是不必要的,请告诉我。
@Entity
@IdClass(TaskRunParticipant.Id.class)
public class TaskRunParticipant implements Serializable {
@javax.persistence.Id
@Column(name = "run_id")
private long runId;
@javax.persistence.Id
@Column(name = "project_id")
private long projectId;
@OneToOne
@JoinColumn(name="project_id")
@MapsId("project_id")
private Project project;
@OneToOne
@JoinColumn(name="run_id")
@MapsId("run_id")
private TaskRun taskRun;
protected TaskRunParticipant(){}
public TaskRunParticipant(TaskRun run, Project project){
this.taskRun = run;
this.project = project;
}
public Project getProject() { return project; }
public void setProject(Project project) { this.project = project; }
public TaskRun getTaskRun() { return taskRun; }
public void setTaskRun(TaskRun taskRun) { this.taskRun = taskRun; }
protected long getRunId(){ return runId; }
protected long getProjectId(){ return projectId; }
protected void setRunId(long runId){ this.runId = runId; }
protected void setProjectId(long projectId){ this.projectId = projectId; }
public final static class Id implements Serializable {
private long runId;
private long projectId;
public long getRunId() { return runId; }
public void setRunId(long runId) { this.runId = runId; }
public long getProjectId() { return projectId; }
public void setProjectId(long projectId) { this.projectId = projectId; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Id id = (Id) o;
return runId == id.runId &&
projectId == id.projectId;
}
@Override
public int hashCode() {
return Objects.hash(runId, projectId);
}
}
}
【问题讨论】:
-
你用的是什么休眠版本?
标签: spring-boot hibernate spring-data-jpa