JPA中实现双向一对多的关联联系

获取编程相关电子书、教程推送与免费下载。

完成
在之前进行单向一对多映射时将Order类的Customer特点注释掉,现在重新铺开。
packagecom.badao.jpa.helloworld;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.GenerationType;
importjavax.persistence.Id;
importjavax.persistence.JoinColumn;
importjavax.persistence.ManyToOne;
importjavax.persistence.Table;
@Table(name=”JPA_ORDERS”)
@EntitypublicclassOrder{privateIntegerid;privateStringorderName;privateCustomercustomer;
@GeneratedValue(strategy=GenerationType.IDENTITY)
@IdpublicIntegergetId(){returnid;
}publicvoidsetId(Integerid){this.id=id;
}
@Column(name=”ORDER_NAME”)publicStringgetOrderName(){returnorderName;
}publicvoidsetOrderName(StringorderName){this.orderName=orderName;
}//映射单向n-1的相相联络//运用@ManyToOne来映射多对一的相相联络//运用@JoinColumn来映射外键.//可运用@ManyToOne的fetch特点来修正默许的相关特点的加载战略@JoinColumn(name=”CUSTOMER_ID”)
@ManyToOnepublicCustomergetCustomer(){returncustomer;
}publicvoidsetCustomer(Customercustomer){this.customer=customer;
}
}
同样在Customer实体类中也要进行映射
packagecom.badao.jpa.helloworld;
importjava.util.HashSet;
importjava.util.Set;
importjavax.persistence.CascadeType;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.FetchType;
importjavax.persistence.GeneratedValue;
importjavax.persistence.GenerationType;
importjavax.persistence.Id;
importjavax.persistence.JoinColumn;
importjavax.persistence.OneToMany;
importjavax.persistence.Table;
@Entity
@Table(name=”JPA_CUSTOMERS”)publicclassCustomer{privateIntegerid;privateStringlastName;privateStringemail;privateintage;privateSetorders=newHashSet<>();//映射单向1-n的相相联络//运用@OneToMany来映射1-n的相相联络//运用@JoinColumn来映射外键列的名称//可以运用@OneToMany的fetch特点来修正默许的加载战略//可以经过@OneToMany的cascade特点来修正默许的删去战略.//注意:若在1的一端的@OneToMany中运用mappedBy特点,则@OneToMany端就不能再运用@JoinColumn特点了.@OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.REMOVE},mappedBy=”customer”)//@JoinColumn(name=”CUSTOMER_ID”)publicSetgetOrders(){returnorders;
}publicvoidsetOrders(Setorders){this.orders=orders;
}
@GeneratedValue(strategy=GenerationType.IDENTITY)
@IdpublicIntegergetId(){returnid;
}publicvoidsetId(Integerid){this.id=id;
}
@Column(name=”LAST_NAME”)publicStringgetLastName(){returnlastName;
}publicvoidsetLastName(StringlastName){this.lastName=lastName;
}publicStringgetEmail(){returnemail;
}publicvoidsetEmail(Stringemail){this.email=email;
}publicintgetAge(){returnage;
}publicvoidsetAge(intage){this.age=age;
}
@OverridepublicStringtoString(){return”Customer[id=”+id+”,lastName=”+lastName+”,email=”+email+”,age=”+age+”]”;
}
}
注:
若是双向1-n的相相联络,履行保存时,若先保存n的一端,再保存1的一端,默许情况下,会多出n条UPDATE句子。
若先保存1的一端,则会多出n条UPDATE句子。
在进行双向1-n相相联络时,建议运用n的一方来保护相相联络,而1的一方不保护相联络,这样会有效的减少SQL句子。
若在1的一端的@OneToMany中运用mappedBy特点,则@OneToMany端就不能再运用@JoinColumn特点了

Java


编写单元测试方法
@TestpublicvoidtestOneToManyPersist(){
Customercustomer=newCustomer();
customer.setAge(18);
customer.setEmail(“BB@163.com”);
customer.setLastName(“BB”);
Orderorder1=newOrder();
order1.setOrderName(“O-BB-1”);
Orderorder2=newOrder();
order2.setOrderName(“O-BB-2”);//树立相相联络customer.getOrders().add(order1);
customer.getOrders().add(order2);
order1.setCustomer(customer);
order2.setCustomer(customer);//履行保存操作entityManager.persist(customer);
entityManager.persist(order1);
entityManager.persist(order2);
}

© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章