【问题标题】:Relationship and referential integrity constraint using JPA使用 JPA 的关系和参照完整性约束
【发布时间】:2016-10-18 11:03:22
【问题描述】:

我开始使用 MySQL 和 JPA 来设计我的 Java EE 应用程序以实现持久性,所以我怀疑它如何用于数据库设计。

所以我定义了我的数据库表,例如:员工和部门与他的关系

使用 JPA,我按照一些教程定义了关系,但我不明白是否也必须为数据库表定义外键和约束,或者将其保留为:

CREATE TABLE `thejavageek`.`employee` (
  `idemployee` INT         NOT NULL,
  `firstname`  VARCHAR(45) NULL,
  `lastname`   VARCHAR(45) NULL,
  # ...
PRIMARY KEY (`idemployee`)
);

还有 JPA 实体:

@Entity
public class Employee{

   @Id
   @GeneratedValue( strategy= GenerationType.AUTO )     

   private int eid;
   private String ename;
   private double salary;
   private String deg;

   @ManyToOne
   private Department department;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }

   public void setEid(int eid)  {
      this.eid = eid;
   }

   public String getEname( ) {
      return ename;
   }

   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }

   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }

   public void setDeg(String deg) {
      this.deg = deg;
   }

   public Department getDepartment() {
      return department;
   }

   public void setDepartment(Department department) {
      this.department = department;
   }
}

@Entity
public class Department {

   @Id 
   @GeneratedValue( strategy=GenerationType.AUTO )

   private int id;
   private String name;

   public int getId() {
      return id;
   }

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

   public String getName( ){
      return name;
   }

   public void setName( String deptName ){
      this.name = deptName;
   }
}

将关系和约束管理留给 JPA?

提前致谢!

【问题讨论】:

    标签: java mysql database hibernate jpa


    【解决方案1】:

    在您的代码系统中,将创建一个名为 employee_department_mapping 的新表(其中包含 employee_iddepartment_id 列),其中将包含每个员工与其部门的映射。

    但是,如果您想将其作为员工表中的外键处理,请将您的 department 字段标记为 @JoinColumn 并告知外键列的名称

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
    

    并将hibernate.hbm2ddl.auto 设置为update

    现在如果你重新启动应用程序,它会自动在员工表中生成名为 department_id 的外键列。

    【讨论】:

    • 感谢@naresh-joshi 的回复,所以我不需要在 MySQL 中定义任何外键,只需创建带有或不定义主键的表?
    • 并将所有创建和管理委托给 ORM?可以发个例子或链接吗?
    • 你甚至不需要创建你的表,只需要创建一个空的模式,hibernate会做所有的事情,你可以按照这个视频教程系列来理解它youtube.com/playlist?list=PL4AFF701184976B25
    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2021-12-19
    • 2013-12-15
    相关资源
    最近更新 更多