1.一对多的映射关系
demo:订单和订单项
规范: 多的一方维护外键的更新(关系维护端),一的一方没有权利更新外键(被维护关系端)
1.Cascade级联操作类型:(使用前提是对应的实体管理方法),当对某实体进行某操作时,会同时对具有映射关系的实体其相应操作
REFRESH:获取最新的数据
PERSIST:保存
MERGE:更新
REMOVEL:删除
2.加载类型为懒惰加载(碰到某人many的加载类型为延迟加载,碰到one便立即加载)
3.被维护端关系实体会出现mappedby(外键字段)
2.demo:订单和订单项
1.实体bean Order和OrderItem
@Entity
@Table(name="orders")
public class Order {
/**
* 订单编号
*/
private String orderId;
/**
* 订单总价
*/
private Double cost=0d;
/**
* 订单项
*/
private Set<OrderItem> items=new HashSet<OrderItem>();
/**
* @return the orderId
*/
@Id @Column(length=36)
public String getOrderId() {
return orderId;
}
/**
* @param orderId the orderId to set
*/
public void setOrderId(String orderId) {
this.orderId = orderId;
}
/**
* @return the cost
*/
@Column(nullable=false)
public Double getCost() {
return cost;
}
/**
* @param cost the cost to set
*/
public void setCost(Double cost) {
this.cost = cost;
}
/**
* @return the items
*/
@OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.MERGE}
,mappedBy="order")
public Set<OrderItem> getItems() {
return items;
}
/**
* @param items the items to set
*/
public void setItems(Set<OrderItem> items) {
this.items = items;
}
/**
* 增加订单项
* @param oi
*/
public void addItems(OrderItem oi){
this.items.add(oi);
oi.setOrder(this);
}
}
@Entity
public class OrderItem {
/**
* 订单项编号
*/
private Integer itemId;
/**
* 商品名称
*/
private String productName;
/**
* 商品价格
*/
private Double price=0d;
/**
* 所属订单
*/
private Order order;
/**
* @return the productName
*/
@Column(length=40,nullable=false)
public String getProductName() {
return productName;
}
/**
* @param productName the productName to set
*/
public void setProductName(String productName) {
this.productName = productName;
}
/**
* @return the price
*/
@Column(nullable=false)
public Double getPrice() {
return price;
}
/**
* @param price the price to set
*/
public void setPrice(Double price) {
this.price = price;
}
/**
* @return the itemId
*/
@Id @GeneratedValue
public Integer getItemId() {
return itemId;
}
/**
* @param itemId the itemId to set
*/
public void setItemId(Integer itemId) {
this.itemId = itemId;
}
/**
* @return the order
* 只需要级联更新
* optional=false,代表必须存在外键字段
*/
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.EAGER,optional=false)
@JoinColumn(name="orderId")
public Order getOrder() {
return order;
}
/**
* @param order the order to set
*/
public void setOrder(Order order) {
this.order = order;
}
}
2
.单元测试
public class OneToManyTest {
@Test
public void test(){
EntityManagerFactory factory=Persistence.createEntityManagerFactory("MyJpa");
factory.close();
}
@Test
public void save(){
EntityManagerFactory factory=Persistence.createEntityManagerFactory("MyJpa");
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();
Order order=new Order();
order.setOrderId(UUID.randomUUID().toString());
OrderItem item1=new OrderItem();
item1.setProductName("Mac pro");
item1.setPrice(9000d);
OrderItem item2=new OrderItem();
item2.setProductName("X1");
item2.setPrice(10000d);
OrderItem item3=new OrderItem();
item3.setProductName("air");
item3.setPrice(7000d);
order.addItems(item1);
order.addItems(item2);
order.addItems(item3);
order.setCost(26000d);
em.persist(order);
em.getTransaction().commit();
em.close();
factory.close();
}
@Test
public void update(){
EntityManagerFactory factory=Persistence.createEntityManagerFactory("MyJpa");
EntityManager em=factory.createEntityManager();
em.getTransaction().begin();
Order order=em.find(Order.class, "57372f24-ada7-4c66-b410-ad2aa2cca23b");
Set<OrderItem> sets=order.getItems();
for (OrderItem orderItem : sets) {
if(orderItem.getProductName().equals("air")){
orderItem.setPrice(7888d);
}
}
order.setCost(26888d);
em.getTransaction().commit();
em.close();
factory.close();
}
//删除同上操作....
@Test
public void test1(){
System.out.println(UUID.randomUUID().toString());
}
}
分享到:
相关推荐
JPA学习笔记
java jee技术,jpa的使用接受学习笔记。
jpa 详解 学习笔记 传智播客 内容经典
JPA入门学习笔记,包含实体表的关联映射
传智播客——JPA学习笔记 网络上有一份pdf格式的《JPA学习笔记》,但是内容排版有点乱,而且有缺失的部分,小弟从原来的blog处拷贝出来,并加以排版,制作成了chm格式的,大家应该知道chm格式比较适合作为参考资料或...
JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射
jpa入门级教程,有jpa基础,环境搭建,常用注解,jpa映射,以及jpql介绍和常见异常.
这里面的太贵了,来个免费的. 这是一个很不错的笔记哦
在学习JPA的过程中将JPA的核心的内容整理了一下做成一份JPA学习笔记希望能够帮助到其他正在学习或者将要学习JPA的朋友。
JPA学习笔记-EJB-06JPA+Spring使用经验。
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。 第一种单字段主键...
初学jpa,有一些体会和大家分享一下,主要是介绍了jpa中state的概念和应用
本文是学习 JPA 笔记,可能会根据自己的学习进度逐渐完善。...随着笔者的学习笔记,大家一起学习吧,还是那句话,有什么问题 大家一起探讨。有什么错误希望指证!谢谢。 http://blog.csdn.net/suhuanzheng7784877
jpa 全面学习资料 入门 实战 示例 jpa开发手册 JPA_全面讲解 JPA使用入门_基础 JPA学习笔记 JPA注解 JPA简介
上次简单介绍了JPA的基本部署和操作过程,算是认识JPA了,下面我们继续学习JPA吧,我们从JPA的注解标记@Table和@Column开始逐渐介绍。
jpa常用方法,适合新手下载学习 其中包括select/upate/delete/insert 以及in、notin、等等
网上整理的学习笔记,对于初学者认识,文档归集还是有好处的
综合多家视频,超全面综合笔记!Spring Data Jpa 学习