我想确保我理解我在数据库表示中所做的事情。与休眠。
我的项目管理工具可让我的用户创建一个由Project
组成的Phase
。
我不想创建一个链接表,并且在我的实体中继续这样做:
我的ProjectEntity
:
@OneToMany(mappedBy = "id")
private Set<PhaseEntity> phases = new HashSet<>(0);
和我的PhaseEntity
:
@NotNull
@ManyToOne(targetEntity = ProjectEntity.class)
private ProjectEntity project;
填写我的PhaseEntity
后,通过我的DAO
phaseDao.save(phaseEntity);
我收到以下错误:
错误:在表“插入”上插入或更新违反外键约束“fk8x1x98c4hq4ps0d30y6nxe90u” 细节:表(“项目”)中没有键(phase_id)=(1820)。
我看到它的方式,将包含特定ProjectEntity
的阶段推送到我的数据库应该创建1个条目并更新另一个条目,第一个应该是我的phase
条目,后者应该是通过向其project
添加相位来更新为Set
。
我是否必须在我的project
表中明确保存我的阶段?
你在推理中看到任何瑕疵吗?
答案 0 :(得分:0)
只是分享知识!
“由阶段组成的项目” 因此,如果要在“阶段”表中插入阶段,则需要在Project表中具有一个角色,该阶段具有与“阶段”表中新插入行的“class”列值相同的“class”列值。
外键是引用另一个表的列(通常是主键)的一列(或多列)。外键的目的是确保数据的引用完整性。换句话说,只允许出现在数据库中的值。
我们有两个表,一个包含所有项目的Project表,以及一个包含所有阶段的Phase表。由阶段组成的项目。为了强制执行此逻辑,我们在Phase表上放置一个外键,并让它引用Project表的主键。这样,我们可以确保Phase表中的所有阶段都与Phase表中的项目相关。换句话说,Phases表不能包含项目表中不在项目中的信息。