【问题标题】:Hibernate - Spring Data JPA One To Many unique constraint across tableHibernate - Spring Data JPA 一对多跨表的唯一约束
【发布时间】:2018-07-25 09:08:02
【问题描述】:

我有一个部门和员工表。我需要部门名称和部门中的员工是唯一的,以便为具有相同员工集的部门提供一个新条目,它应该会引发唯一约束违规错误。

我不确定如何在休眠中解决这个问题。

我需要跨多个表具有唯一约束。

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(
        name="dept"
)
public class DeptEntity {

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

    @Column(nullable = false)
    private String name;

    @OneToMany(mappedBy = "dep", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Employee> attributes = new ArrayList<>();

  }

导入 javax.persistence.*;

  @Entity
  @Table(name="emp"
  )
  public class Employee {


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

      private String name;


      @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
      @JoinColumn(name = "dept_id", referencedColumnName = "id", nullable = false)
      private DeptEntity dep;

  }

【问题讨论】:

  • 您可能需要为此使用数据库触发器
  • 没有使用 JPA 的解决方案?感谢您的评论。

标签: postgresql hibernate spring-data


【解决方案1】:

你可以这样使用:

@Column(unique= true)
private String name;

【讨论】:

  • 跨多个表的唯一性检查是个问题。感谢您的尝试
  • 一些问题!你sead:“对于具有同一组员工的部门,它应该抛出一个独特的约束违规错误”,所以如果它不是同一组员工,你是否允许持久性?如果您选择 yes ,那么您的关系将是多对多的,并且对 dep 和 emp 有复合约束(在多对多表中)。否则,如果您拒绝,我认为您只需要对部门名称设置唯一的约束即可。告诉我可以吗^^ @unnik
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2012-05-07
  • 2018-03-19
  • 2018-09-14
  • 2011-03-25
相关资源
最近更新 更多