春天jpa中多的原理是什么

  介绍

本篇文章为大家展示了春天jpa中多的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1。java和jpa中所有的关系都是单向的。这个关系数据库不同,关系数据库,通过外键定义并查询,使得反向查询总是存在的。

2。JPA还定义了一个对关系,它与多关系类似,但反向关系(如果已定义)是ManyToOne关系。

OneToMany与JPA中ManyToMany关系的主要区别在于,ManyToMany总是使用中间关系连接表来存储关系,

OneToMany可以使用连接表或者目标对象的表引用中的外键源对象表的主键。

@OneToMany (=cascade  CascadeType.ALL)   @JoinColumn才能(=name “OPR_WARE_SYSCONFIG_ID", foreignKey =, @ForeignKey (ConstraintMode.NO_CONSTRAINT))   private 才能;List< WarehouseVO>,仓库;

wareHouseVO的表通过外键字段关联,而定义了对多的属性的签证官则不需要添加表字段。

春天jpa中多的原理是什么

春天jpa中多的原理是什么

ManyToOne:

@ManyToOne   @JoinColumn才能(=name “OPR_WAREHOUSE_ENV_ID")   private 才能;EnvironmentVO  env ;

春天jpa中多的原理是什么

春天jpa中多的原理是什么

总结,作为许多的一方需要有外键关联人的一方。

<强> @ManyToMany注解

多需要和@JoinTable表结合使用,多总是使用中间关系连接表来存储关系。如果两个签证官都定义了多的话,因为单向关系,会生成有2个中间表。所以需要改造成双向关系,使其只存在一个中间表。

例子:

:一方不需要的mappedBy属性,一方需要。

@ManyToMany   @JoinTable才能(=name “AUTO_SYSTEM",, joinColumns =, {, @JoinColumn (=name “OPR_AUTO_ID"),},, inverseJoinColumns =, {   ,,,,,@JoinColumn (=name “OPR_SYSTEM_ID"),},, foreignKey =, @ForeignKey (ConstraintMode.NO_CONSTRAINT), inverseForeignKey =, @ForeignKey (ConstraintMode.NO_CONSTRAINT))   private 才能;List< SystemVO>,系统;   @ManyToMany (=mappedBy “students")   private  List< Service>,服务;

b:

@ entity   public  class  Student  {   ,@ id   private 才能String  id;   @ManyToMany才能   @JoinTable才能   private 才能;List< Teacher>,教师;   }   ,   @ entity   public  class  Teacher  {   ,@ id   private 才能String  id;   @ManyToMany才能   @JoinTable才能   private 才能;List< Student>,学生;   }

@ManyToMany即表示了老师和学生的多对多关系.@ManyToMany注解可以用在字段或方法上

但是这样会有两个表出现,TEACHER_STUDENTS表和STUDENT_TEACHERS。

原因是这里的多对多关系正是维基百科提到的单向原则。老师和学生虽然分别定义了自己的多对多关系,但这个关系都是单向的,要使关系成为双向。

<强>的mappedBy属性

的mappedBy是OneToOne, OneToMany和ManyToMany这三种关联关系的属性。

用来标注拥有这种关系的字段。除非关系是单向的,否则是必需的。

什么叫拥有关联关系呢,假设是双向一对一的话,那么拥有关系的这一方有建立,解除和更新与另一方关系的能力。而另一方没有,只能被动管理。

由于JoinTable和JoinColumn一般定义在拥有关系的这一端,而mappedBy一定是定义在关系的被拥有方(拥有的一面),也就是跟定义JoinTable

和JoinColumn互斥的一方,它的值指向拥有方中关于被拥有方的字段,可能是一个对象(对),也可能是一个对象集合(多)。

@ entity   public  class  Student  {   ,@ id   private 才能String  id;   @ManyToMany才能(=mappedBy “students")   private 才能;List< Teacher>,教师;   }   ,   @ entity   public  class  Teacher  {   ,@ id   private 才能String  id;   @ManyToMany才能   @JoinTable才能(“学生”)   private 才能;List< Student>,学生;   }

这时中间表只有一张TEACHER_STUDENTS,关联关系也变成了我们想要的双向关系。

春天jpa中多的原理是什么