JPA(三)之实体关系一对多(多对一)

1.背景介绍:

   对于购买商品时,订单信息(Order)和订单商品信息(OrderItem)的关系就是一对多的关系。

2.实体bean:

  Order.java代码

1package com.sinoi.bean; 2 3import java.util.HashSet; 4import java.util.Set; 5 6import javax.persistence.CascadeType; 7import javax.persistence.Column; 8import javax.persistence.Entity; 9import javax.persistence.FetchType; 10import javax.persistence.GeneratedValue; 11import javax.persistence.Id; 12import javax.persistence.OneToMany; 13import javax.persistence.Table; 14 15@Entity 16@Table(name="my_order") 17public class Order { 18 @Id @Column(length=12) 19 private String orderId; 20 @Column(nullable=false) 21 private Float amount = 0f; 22 @OneToMany(cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, 23 mappedBy="order") 24 private Set<OrderItem> orderItems = new HashSet<OrderItem>(); 25 public String getOrderId() { 26 return orderId; 27 } 28 public void setOrderId(String orderId) { 29 this.orderId = orderId; 30 } 31 public Float getAmount() { 32 return amount; 33 } 34 public void setAmount(Float amount) { 35 this.amount = amount; 36 } 37 38 public Set<OrderItem> getOrderItems() { 39 return orderItems; 40 } 41 public void setOrderItems(Set<OrderItem> orderItems) { 42 this.orderItems = orderItems; 43 } 44 public void addOrderItem(OrderItem orderItem) { 45 orderItem.setOrder(this);//这句代码不加也可! 46 this.orderItems.add(orderItem); 47 } 48 49 50}

OrderItem.java代码

1package com.sinoi.bean; 2 3import javax.persistence.CascadeType; 4import javax.persistence.Column; 5import javax.persistence.Entity; 6import javax.persistence.GeneratedValue; 7import javax.persistence.Id; 8import javax.persistence.JoinColumn; 9import javax.persistence.ManyToOne; 10 11@Entity 12public class OrderItem { 13 @Id @GeneratedValue 14 private Integer id; 15 @Column(length=20, nullable=false) 16 private String productName; 17 @Column(nullable=false) 18 private Float sellPrice; 19 @ManyToOne(cascade={CascadeType.REFRESH, CascadeType.MERGE}, optional=false) 20 @JoinColumn(name="item_order_for") 21 private Order order; 22 public Order getOrder() { 23 return order; 24 } 25 public void setOrder(Order order) { 26 this.order = order; 27 } 28 public Integer getId() { 29 return id; 30 } 31 public void setId(Integer id) { 32 this.id = id; 33 } 34 public String getProductName() { 35 return productName; 36 } 37 public void setProductName(String productName) { 38 this.productName = productName; 39 } 40 public Float getSellPrice() { 41 return sellPrice; 42 } 43 public void setSellPrice(Float sellPrice) { 44 this.sellPrice = sellPrice; 45 } 46}

3.测试代码

1package junit.test; 2 3import javax.persistence.EntityManager; 4import javax.persistence.EntityManagerFactory; 5import javax.persistence.Persistence; 6 7import org.junit.Test; 8 9import com.sinoi.bean.Order; 10import com.sinoi.bean.OrderItem; 11 12public class UnitTest { 13 @Test 14 public void save() { 15 EntityManagerFactory entityManagerFactory = Persistence 16 .createEntityManagerFactory("unitname"); 17 EntityManager entityManager = entityManagerFactory 18 .createEntityManager(); 19 entityManager.getTransaction().begin(); 20 21 Order order = new Order(); 22 order.setOrderId("jfdkf323"); 23 order.setAmount(232f); 24 OrderItem orderItem = new OrderItem(); 25 orderItem.setProductName("basketball"); 26 orderItem.setSellPrice(221f); 27 OrderItem orderItem2 = new OrderItem(); 28 orderItem2.setProductName("football"); 29 orderItem2.setSellPrice(11f); 30 orderItem.setOrder(order); 31 orderItem2.setOrder(order); 32 order.addOrderItem(orderItem); 33 order.addOrderItem(orderItem2); 34 35 entityManager.persist(order); 36 entityManager.getTransaction().commit(); 37 entityManager.close(); 38 entityManagerFactory.close(); 39 40 } 41}

4.配置文件persistence.xml和前面JPA(一)、、、一样,在此省略

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Go 语言编程 — gorm 的数据完整性约束

目录文章目录目录实体完整性(主键约束)用户定义完整性(非空约束、唯一约束、检查约束和默认值)参照完整性(外键约束)关联关系一对一、一对多关联多对多关联示例实体完整性(主键约束)每个关系(表)至少存在一个主

Django之ORM(多对多)

一、ManyToManyField1、classRelatedManager"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:1.外键关系的反向查询2.多对多关联关系简单来说就是当 点后面的对象 可能存在多个的时

Django中模型层中ORM的多表操作

ORM的多表创建(一对一.一对多,多对多):1模型创建  实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(onetoone)出版商模型:出版

Java中list集合的clean()方法滥用引发的bug

做的是电商系统,主系统生成订单后,分别加入到不同的队列中给另外的三个子系统来异步处理,订单和商品是一对多的关系,在实际测试中,发现其中有一个子系统从队列中获取到的订单实体中,商品列表一直为空,子系统的开发人员一直说是获取不到值导致。因为这个问题,测试一直没通过,不得已只能打日志,反复排查。最后发现在这个子系统中,从队列拿到订单实体后,商品列表是不为空的,但是

JPA

JPA中,一对多关系使用@OneToMany标示关系维护端:1packagecom.yl.demo1.bean.oneTomany;23importjavax.persistence.CascadeType;4importjavax.persistence.Column;5im