禁用在OneToOne关联中将2个孩子保存为父母的可能性

时间:2018-12-25 15:36:50

标签: jpa spring-data-jpa

可以将同一个父母保存为2个孩子:

我想禁用这种可能性。

域:

@Entity
public class Child {

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

    @OneToOne
    Parent parent;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Parent getParent() {
        return parent;
    }

    public void setParent(Parent parent) {
        this.parent = parent;
    }
}
@Entity
public class Parent {

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

    @OneToOne(mappedBy="parent")
    private Child child;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @PreRemove
    private void preRemove() {
        child.setParent(null);
    }

}

如何更改此代码以禁止2个孩子拥有同一父母的可能性?我应该爬FK还是其他东西?使用JPA如何做到这一点?

1 个答案:

答案 0 :(得分:1)

@JoinColumn上定义@OneToOne,然后添加unique = true。这样,将在数据库侧检查父母的唯一性:

@OneToOne
@JoinColumn(name="PARENT_ID", unique = true)
Parent parent;