JPA

JPA中,一对多关系使用@OneToMany标示

关系维护端:

1 1 package com.yl.demo1.bean.oneTomany; 2 2 3 3 import javax.persistence.CascadeType; 4 4 import javax.persistence.Column; 5 5 import javax.persistence.Entity; 6 6 import javax.persistence.GeneratedValue; 7 7 import javax.persistence.Id; 8 8 import javax.persistence.JoinColumn; 9 9 import javax.persistence.ManyToOne; 1010 1111 1212 @Entity 1313 public class OrderItem { 1414 1515 private Integer id; 1616 private String productName; 1717 private Float sellPrice; 1818 private Order order; 1919 2020 @Id @GeneratedValue 2121 public Integer getId() { 2222 return id; 2323 } 2424 public void setId(Integer id) { 2525 this.id = id; 2626 } 2727 @Column(length=40, nullable=false) 2828 public String getProductName() { 2929 return productName; 3030 } 3131 public void setProductName(String productName) { 3232 this.productName = productName; 3333 } 3434 @Column(nullable=false) 3535 public Float getSellPrice() { 3636 return sellPrice; 3737 } 3838 public void setSellPrice(Float sellPrice) { 3939 this.sellPrice = sellPrice; 4040 } 4141 /** 4242 * optional代表属性是否可选, 4343 * true--代表字段可为空 4444 * false--代表字段不允许为null 4545 * 4646 * @JoinColumn---指定外键的名称 4747 */ 4848 @ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH}, optional=true) 4949 @JoinColumn(name="order_id") 5050 public Order getOrder() { 5151 return order; 5252 } 5353 public void setOrder(Order order) { 5454 this.order = order; 5555 } 5656 5757 5858 }

关系被维护端:

1 1 package com.yl.demo1.bean.oneTomany; 2 2 3 3 import java.util.HashSet; 4 4 import java.util.Set; 5 5 6 6 import javax.persistence.CascadeType; 7 7 import javax.persistence.Column; 8 8 import javax.persistence.Entity; 9 9 import javax.persistence.FetchType; 1010 import javax.persistence.Id; 1111 import javax.persistence.OneToMany; 1212 import javax.persistence.Table; 1313 /** 1414 * JPA中,1-m的双向关系中,多的一方为关系维护端,关系维护端服务外键记录的更新,关系被维护端是没有权利更新外键记录的 1515 * 1616 * 1717 */ 1818 @Entity 1919 @Table(name="orders") 2020 public class Order { 2121 private String orderId; 2222 private Float amount = 0f; 2323 private Set<OrderItem> items = new HashSet<OrderItem>(); 2424 2525 @Id @Column(length=12) 2626 public String getOrderId() { 2727 return orderId; 2828 } 2929 public void setOrderId(String orderId) { 3030 this.orderId = orderId; 3131 } 3232 @Column(nullable=false) 3333 public Float getAmount() { 3434 return amount; 3535 } 3636 public void setAmount(Float amount) { 3737 this.amount = amount; 3838 } 3939 /**级联操作 4040 * CascadeType.REFRESH--select order, select OrderItem 4141 * CascadeType.PERSIST--insert into Order, insert into OrderItem 4242 * CascadeType.MERGE----当Order处于游离状态时,对Order更新,也会更新OrderItem--update Order, for(update OrderItem) 4343 * CascadeType.REMOVE---delete Order, delete OrderItem 4444 * 可以采用CascadeType.ALL包括上述四种. 4545 * 上述四种方法只有调用相应的方法时才会触发。即EntityManager.refresh(),EntityManager.persist(),EntityManager.merge(), EntityManager.remove() 4646 * 4747 * *ToMany的fetch默认值为FetchType.LAZY 4848 * *ToOne的fetch默认值为FetchType.EAGER 4949 * 5050 * 5151 * mappedBy出现在关系的被维护端,它指定在关系维护端是由哪个属性进行维护关系 5252 */ 5353 @OneToMany(cascade={CascadeType.REFRESH, CascadeType.PERSIST} 5454 , fetch=FetchType.LAZY 5555 , mappedBy="order") 5656 public Set<OrderItem> getItems() { 5757 return items; 5858 } 5959 public void setItems(Set<OrderItem> items) { 6060 this.items = items; 6161 } 6262 6363 6464 public void addOrderItem(OrderItem orderItem) { 6565 orderItem.setOrder(this); 6666 this.items.add(orderItem); 6767 } 6868 6969 }

 常见操作:

1 1 @Test 2 2 public void save() { 3 3 EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL"); 4 4 EntityManager em = factory.createEntityManager(); 5 5 em.getTransaction().begin();//事务开始 6 6 7 7 Order order = new Order(); 8 8 order.setAmount(34f); 9 9 order.setOrderId("999"); 1010 1111 OrderItem orderItem1 = new OrderItem(); 1212 orderItem1.setProductName("football"); 1313 orderItem1.setSellPrice(90f); 1414 1515 OrderItem orderItem2 = new OrderItem(); 1616 orderItem2.setProductName("basketball"); 1717 orderItem2.setSellPrice(100f); 1818 1919 order.addOrderItem(orderItem1); 2020 order.addOrderItem(orderItem2); 2121 2222 em.persist(order); 2323 2424 em.getTransaction().commit(); 2525 em.close(); 2626 factory.close(); 2727 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

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

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

JPA - HelloWorld