博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA一对多关联
阅读量:7158 次
发布时间:2019-06-29

本文共 4510 字,大约阅读时间需要 15 分钟。

  关于JPA一对多关联这里使用Order与OrderItem来模拟。一个Order可以关联多个OrderItem,而一个OrderItem只能关联一个Order。Order与OrderItem是一对多的关联关系。Order类如下:

1 package com.yichun.bean; 2  3 import java.util.HashSet; 4 import java.util.Set; 5  6 import javax.persistence.CascadeType; 7 import javax.persistence.Column; 8 import javax.persistence.Entity; 9 import javax.persistence.Id;10 import javax.persistence.OneToMany;11 import javax.persistence.Table;12 13 @Entity14 @Table(name = "orders")15 public class Order {16 17     private String orderId;18     private Float amoutn = 0f;19     private Set
items = new HashSet
();20 21 @Id22 @Column(length = 12, nullable = false)23 public String getOrderId() {24 return orderId;25 }26 27 public void setOrderId(String orderId) {28 this.orderId = orderId;29 }30 31 @Column(nullable = false)32 public Float getAmoutn() {33 return amoutn;34 }35 36 public void setAmoutn(Float amoutn) {37 this.amoutn = amoutn;38 }39 40 // CascadeType.REFRESH,级联刷新。orderItems更改的时候,就重新加载orderItems41 42 // CascadeType.PERSIST, 级联保存。insert order insert into orderitem 。调用manager.persist(new Order())的时候才会起作用43 44 // CascadeType.MERGE,级联更新 。order在游离状态的时候被修改了,order中的orderItem也被修改了,update order for (update orderItem)。 调用manager.merge(order) 的时候才会起作用45 46 // CascadeType.REMOVE级联删除。 删除order的时候,orderItems也会被删除,没有住外键约束的时候。调用manager.remove(order)的时候才会起作用。47 48 // 针对实体管理器的四种方法49 // fetch =FetchType.LAZY默认是延迟加载。××tomany由一方得到多的一方的时候,默认就是延迟加载,××toone的时候,默认就是立即加载50 // 出现mappedBy的类就是关系被维护端。关系由对方里面的order属性维护51 @OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST,52 CascadeType.MERGE, CascadeType.REMOVE }, mappedBy = "order")53 public Set
getItems() {54 return items;55 }56 57 public void setItems(Set
items) {58 this.items = items;59 }60 61 // 建立两者之间的关系62 public void addOrderItem(OrderItem orderItem) {63 orderItem.setOrder(this);64 this.items.add(orderItem);65 }66 }

OrderItem类如下:

1 package com.yichun.bean; 2  3 import javax.persistence.CascadeType; 4 import javax.persistence.Column; 5 import javax.persistence.Entity; 6 import javax.persistence.GeneratedValue; 7 import javax.persistence.Id; 8 import javax.persistence.JoinColumn; 9 import javax.persistence.ManyToOne;10 11 @Entity12 public class OrderItem {13     private Integer id;14     private String productName;15     private Float sellPrice = 0f;16     private Order order;17 18     @Id19     @GeneratedValue20     public Integer getId() {21         return id;22     }23 24     public void setId(Integer id) {25         this.id = id;26     }27 28     @Column(length = 40, nullable = false)29     public String getProductName() {30         return productName;31     }32 33     public void setProductName(String productName) {34         this.productName = productName;35     }36 37     @Column(nullable = false)38     public Float getSellPrice() {39         return sellPrice;40     }41 42     public void setSellPrice(Float sellPrice) {43         this.sellPrice = sellPrice;44     }45 46     // optional=true,在数据库中允许为null47     @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = true)// 级联更新,级联刷新48     @JoinColumn(name = "order_id")49     public Order getOrder() {50         return order;51     }52 53     public void setOrder(Order order) {54         this.order = order;55     }56 }

保存数据:

1     @Test 2     public void save() { 3         EntityManagerFactory factory = Persistence 4                 .createEntityManagerFactory("testjpa"); 5         EntityManager manager = factory.createEntityManager(); 6         manager.getTransaction().begin(); 7  8         Order order = new Order(); 9         order.setAmoutn(120f);10         order.setOrderId("999");// UUID.randomUUID().toString()11 12         OrderItem item = new OrderItem();13         item.setProductName("足球");14         item.setSellPrice(90f);15 16         OrderItem item2 = new OrderItem();17         item2.setProductName("排球");18         item2.setSellPrice(30f);19 20         // 设置两者之间的关联21         order.addOrderItem(item);22         order.addOrderItem(item2);23 24         // 保存Order,此时也会保持OrderItem25         manager.persist(order);26 27         manager.getTransaction().commit();28         manager.clear();29         factory.close();30     }

 

转载于:https://www.cnblogs.com/always-online/p/3459949.html

你可能感兴趣的文章
Web应用程序的自动化测试库-FluentAutomation
查看>>
c++ new(不断跟新)
查看>>
Windows 8.1 应用再出发 (WinJS) - 几种新增控件(1)
查看>>
html的下拉框的几个基本使用方法
查看>>
Android总结篇系列:Activity中几个主要函数详解
查看>>
无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法...
查看>>
C语言指针传递详解
查看>>
C# DataTable的詳細使用方法
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
可变參数学习笔记
查看>>
strcpy
查看>>
Hello World on Impala
查看>>
北京簋街 美食全然攻略 + 簋街好吃的夜宵去处-----店铺介绍大全
查看>>
2014年度江西省高等学校科技落地计划项目立项名单
查看>>
VC项目程序运行时设置指定目录读取Dll
查看>>
#HTTP协议学习# (三)摘要认证
查看>>
git 解决fatal: Not a git repository
查看>>
【WP8】ScrollViewer滑动到底触发器(ListBox失效)
查看>>
SharedPreferences
查看>>
lua元表
查看>>