jpa多表关联,jpa 一对多关系保存

  jpa多表关联,jpa 一对多关系保存

  

目录

JPA双向多对多关联关系@ ManyToManyManyToMany和一个人的双向控制1、多对多2、一对一以及多对一

 

  

JPA双向多对多关联关系@ManyToMany

包com。JPA。hello world导入Java。util。hashset导入Java。util。设置;导入javax。坚持。列;导入javax。坚持。实体;导入javax。坚持。产生的价值;导入javax。坚持。id;导入javax。坚持。manytomany导入javax。坚持。表;@ Table(name= Category ys )@ entity公共类Category { private Integer cID私有字符串cname private SetItem items=new HashSetItem();@ Id @ Column(name= C _ Id )@ GeneratedValuepublic Integer getcID(){ return cID;} public void setcID(Integer cID){ this。cID=cID} @ Column(NAME= C _ NAME )公共字符串get cName(){ return cName;} public void set cName(String cName){ this。cName=cName}//添加了凡是双向关联属性则不能使用@JoinTable注解@ many to many(mapped by= category ys )public SetItem getItems(){ return items;} public void set items(SetItem items){ this。项目=项目;} }包com。JPA。hello world导入Java。util。hashset导入Java。util。设置;导入javax。坚持。列;导入javax。坚持。实体;导入javax。坚持。产生的价值;导入javax。坚持。id;导入javax。坚持。联接列;导入javax。坚持。可接合的;导入javax。坚持。manytomany导入javax。坚持。表;@ Table(name= ITEMS )@ entity公共类Item { private Integer iId名字中的私有字符串;private set category category ys=new HashSetCategory();@ Id @ generated value @ Column(name= I _ Id )public Integer getid(){ return iId;} public void setiId(Integer iId){ this。iId=iId} @ Column(NAME= I _ NAME )public String getname(){ return iName;} public void setiName(String iName){ this。iName=iName} //使用@JoinTable注解添加中间表//其中名字属性设置中间表的表名//joinclums属性在中间表中添加的列//连接列属性://@joinColumn属性设置中间表中的列名//referencedColumnName属性指向被映射表的主键(可以没有该属性)//@inverseJoinColumns另外一张表在中间表中的列@ JoinTable(name= ITEMS _ CATEGORY ys ,//join columns={ @ join column(name= ITEM _ ID ,referencedColumnName=I_ID)},join column={ @ join column(name= ITEM _ ID )},//inversejoincolumn={ @ join column(name= CATEGORY _ ID ,引用列名= C _ ID )} { @ join column(name= CATEGORY _ ID )} @ ManyToManypublic set CATEGORY ys(){ return CATEGORY;} public void SetCategory ys(设置类别类别ys){ this。类别ys=类别ys;} }

 

  

ManyToMany和OneToMany的双向控制

下面我们使用权限管理中角色-客户(用户多对多账号)、角色域(用户一个人权限域)的关系来举例。

 

  

1、ManyToMany

Role表

 

  Account表

  在两个表的对应属性上添加连接列和inverseJoinColumns,并且相互交换。

  连接列指定本表在中间表中的列名inverseJoinColumns .指定受控方的列名。在两个类中都加上这两个属性,并且值互换,则能够实现双向控制,即任何一方删除,都会自动删除对应中间表的数据。

  

2、OneToMany以及ManyToOne

Role表

 

  Domain表

  串联用来指定级联操作,级联的值只能从级联型。持续(级联新建)、级联型。移除(级联删除)、级联型。刷新(级联刷新)、级联型。合并(级联更新)中选择一个或多个。还有一个选择是使用级联型。所有的,表示选择全部四项。

  如果不指定级联,默认是空的,那么在删除作用的时候,只会把领域表中的作用这一列的值删除,而该条记录不删除。

  连接列需要指定,如果不指定就会在领域表中增加额外的一列,这一列与领域的编号一样。经过试验,不指定还会造成级联查找失败,原因未知。

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: