Java 使用JPA的关系和引用完整性约束

Java 使用JPA的关系和引用完整性约束,java,mysql,database,hibernate,jpa,Java,Mysql,Database,Hibernate,Jpa,我开始使用MySQL和JPA设计JavaEE应用程序以实现持久性,所以我怀疑它在数据库设计中的实现程度 因此,我定义了我的数据库表,例如:员工和部门与他的关系 使用JPA,我在一些教程之后定义了关系,但我不明白是否必须为数据库表定义外键和约束,还是不使用as: CREATE TABLE `thejavageek`.`employee` ( `idemployee` INT NOT NULL, `firstname` VARCHAR(45) NULL, `lastna

我开始使用MySQL和JPA设计JavaEE应用程序以实现持久性,所以我怀疑它在数据库设计中的实现程度

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

使用JPA,我在一些教程之后定义了关系,但我不明白是否必须为数据库表定义外键和约束,还是不使用as:

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的关系和约束管理


提前谢谢

在您的代码系统中,将通过名称
员工与部门映射
(其中包含
员工id
部门id
列)创建一个新表,该表将包含每个员工与其部门的映射

但是,如果要在employee表中将其作为外键处理,请使用
@JoinColumn
标记您的
部门
字段,并告知外键列的名称

@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
并将
hibernate.hbm2ddl.auto
设置为
update


现在,如果您将重新启动应用程序,它将自动在employee表中按名称department\u id生成外键列。

在您的代码系统中,将按名称
employee\u department\u mapping
(其中包含
employee\u id
department\u id
列)创建一个新表其中将包含每个员工到其部门的映射

但是,如果要在employee表中将其作为外键处理,请使用
@JoinColumn
标记您的
部门
字段,并告知外键列的名称

@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
并将
hibernate.hbm2ddl.auto
设置为
update


现在,如果您要重新启动应用程序,它将自动在employee表中按名称department_id生成外键列。

感谢回复@naresh joshi,因此我不需要在MySQL中定义任何外键,只创建包含或不包含定义主键的表?并委托ORM进行所有创建和管理?您可以发布一个示例或链接吗?您甚至不需要创建表,只需创建一个空模式,hibernate就能完成所有工作,您可以通过本系列视频教程来理解它,感谢回复@naresh joshi,所以我不需要在MySQL中定义任何外键,只创建包含或不包含定义主键的表?并委托ORM进行所有创建和管理?您可以发布一个示例或一个链接吗?您甚至不需要创建表,只需创建一个空模式,hibernate就可以完成所有事情,您可以按照本系列视频教程来理解它