本篇文章为大家展示了春天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的表通过外键字段关联,而定义了对多的属性的签证官则不需要添加表字段。
ManyToOne:
@ManyToOne @JoinColumn才能(=name “OPR_WAREHOUSE_ENV_ID") private 才能;EnvironmentVO  env ;
总结,作为许多的一方需要有外键关联人的一方。
<强> @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,关联关系也变成了我们想要的双向关系。