【发布时间】:2020-12-05 17:43:57
【问题描述】:
我有两个实体(Project、OtherData)和一个抽象实体。我正在使用 MySQL 和 Quarkus 框架。
问题:当我尝试保存 Project 实体字段时,project_id 仍然是 null。
表架构:
在下一张图片中显示,“project_other_data”表中的 fk 约束:
抽象实体:
@MappedSuperclass
public class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
// getters and setters
}
项目实体
@Entity
@Table(name = "projects")
public class Project extends AbstractEntity {
@NotNull
@Column(name = "name")
private String name;
@NotNull
@Column(name = "surname")
private String surname;
@Column(name = "date_create")
@JsonbDateFormat(value = "yyyy-MM-dd")
private LocalDate dateCreate;
@Column(name = "date_update")
@JsonbDateFormat(value = "yyyy-MM-dd")
private LocalDate dateUpdate;
@OneToOne(mappedBy = "project", cascade = CascadeType.ALL)
private OtherData otherData;
// getters and setters
}
其他数据实体
@Entity
@Table(name = "project_other_data")
public class OtherData extends AbstractEntity {
@OneToOne
@JoinColumn(name = "project_id")
private Project project;
@Column(name = "days_in_year")
private Integer daysInYear;
@Column(name = "holidays_in_year")
private Integer holidaysInYear;
@Column(name = "weeks_in_year")
private Integer weeksInYear;
@Column(name = "free_saturdays")
private Integer freeSaturdays;
@Column(name = "downtime_coefficient")
private BigDecimal downtimeCoefficient;
@Column(name = "changes")
private Integer changes;
// getters and setters
}
用代码保存实体:
@Path("projects")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProjectRest {
@Inject
ProjectService projectService;
@POST
public Response saveProject(Project project) {
return Response.ok(projectService.saveProject(project)).build();
}
}
@RequestScoped
@Transactional
public class ProjectService {
@Inject
EntityManager entityManager;
public Project saveProject(Project project) {
if (project.getId() == null) {
entityManager.persist(project);
} else {
entityManager.merge(project);
}
return project;
}
}
【问题讨论】:
-
您第二次展示了
Project类,而不是OtherData类。请添加OtherData类的代码。 -
@Turing85,哦,对不起。没注意到。我刚刚编辑了它。
-
你能把
@JoinColumn(name = "project_id")修改成@JoinColumn(name = "project_id", referencedColumnName="id")吗? -
另外,您是自动生成表模式还是手动生成表模式?您似乎缺少表
project_other_data.project_id上的外键约束。 -
@act_inGlasses 接受答案后无需编辑标题,请参见此处:meta.stackexchange.com/questions/116101/… Cheers!
标签: java one-to-one quarkus jpa-annotations