首页 > 解决方案 > Spring Data Jpa:如何使我的另一个表的外键是唯一的?

问题描述

我的实体

@Entity
public class ValidationStepDraftGroup {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch=FetchType.EAGER)
@JoinColumn(name = "validationStepDraftGroup_id")
private List<ValidationStep> validationSteps;

// no cascade type, you shouldnt be able to modify a automationInformation by saving a ValidationStepDraftGroup
@OneToOne
@JoinColumn(name= "automation_information_aId", referencedColumnName= "aId")
private AutomationInformation automationInformation;

所以这个实体有一个单向的一对一映射。所以 ValidationStepDraftGroup 对自动化信息的 ID 有一个外键,但反之则不然。

一个automationInformation应该只能存在一个ValidationStepDraftGroup(也可以是0)。如何在 JPA 中强制执行此操作?

标签: hibernatespring-bootspring-data-jpa

解决方案


那是隐含的。这是使用@OneToOne外键唯一的结果。

假设不是,那么两个子实体将与父实体有关系,但这意味着@ManyToOne关系 - 矛盾。

如果你想更明确一点,你可以定义一些基本类型的字段(例如Long),这将是父 id 并unique=true@Column注释中添加一个标志。


推荐阅读