志在指尖
用双手敲打未来

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);
}

未经允许不得转载:IT技术网站 » JPA中实现双向一对多的关联联系
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载