JPA

Wesley13
• 阅读 507

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

关系维护端:

 1 package com.yl.demo1.bean.oneTomany;
 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 
12 @Entity
13 public class OrderItem {
14     
15     private Integer id;
16     private String productName;
17     private Float sellPrice;
18     private Order order;
19     
20     @Id @GeneratedValue
21     public Integer getId() {
22         return id;
23     }
24     public void setId(Integer id) {
25         this.id = id;
26     }
27     @Column(length=40, nullable=false)
28     public String getProductName() {
29         return productName;
30     }
31     public void setProductName(String productName) {
32         this.productName = productName;
33     }
34     @Column(nullable=false)
35     public Float getSellPrice() {
36         return sellPrice;
37     }
38     public void setSellPrice(Float sellPrice) {
39         this.sellPrice = sellPrice;
40     }
41     /**
42      * optional代表属性是否可选,
43      * true--代表字段可为空 
44      * false--代表字段不允许为null
45      * 
46      * @JoinColumn---指定外键的名称
47      */
48     @ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH}, optional=true)
49     @JoinColumn(name="order_id")
50     public Order getOrder() {
51         return order;
52     }
53     public void setOrder(Order order) {
54         this.order = order;
55     }
56     
57     
58 }

关系被维护端:

 1 package com.yl.demo1.bean.oneTomany;
 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.FetchType;
10 import javax.persistence.Id;
11 import javax.persistence.OneToMany;
12 import javax.persistence.Table;
13 /**
14  * JPA中,1-m的双向关系中,多的一方为关系维护端,关系维护端服务外键记录的更新,关系被维护端是没有权利更新外键记录的
15  * 
16  * 
17  */
18 @Entity
19 @Table(name="orders")
20 public class Order {
21     private String orderId;
22     private Float amount = 0f;
23     private Set<OrderItem> items = new HashSet<OrderItem>();
24     
25     @Id @Column(length=12)
26     public String getOrderId() {
27         return orderId;
28     }
29     public void setOrderId(String orderId) {
30         this.orderId = orderId;
31     }
32     @Column(nullable=false)
33     public Float getAmount() {
34         return amount;
35     }
36     public void setAmount(Float amount) {
37         this.amount = amount;
38     }
39     /**级联操作
40      * CascadeType.REFRESH--select order, select OrderItem
41      * CascadeType.PERSIST--insert into Order, insert into OrderItem
42      * CascadeType.MERGE----当Order处于游离状态时,对Order更新,也会更新OrderItem--update Order, for(update OrderItem)
43      * CascadeType.REMOVE---delete Order, delete OrderItem
44      * 可以采用CascadeType.ALL包括上述四种.
45      * 上述四种方法只有调用相应的方法时才会触发。即EntityManager.refresh(),EntityManager.persist(),EntityManager.merge(), EntityManager.remove()
46      *
47      *   *ToMany的fetch默认值为FetchType.LAZY
48      *   *ToOne的fetch默认值为FetchType.EAGER
49      *   
50      *   
51      *   mappedBy出现在关系的被维护端,它指定在关系维护端是由哪个属性进行维护关系
52      */
53     @OneToMany(cascade={CascadeType.REFRESH, CascadeType.PERSIST}
54             , fetch=FetchType.LAZY
55             , mappedBy="order")
56     public Set<OrderItem> getItems() {
57         return items;
58     }
59     public void setItems(Set<OrderItem> items) {
60         this.items = items;
61     }
62     
63     
64     public void addOrderItem(OrderItem orderItem) {
65         orderItem.setOrder(this);
66         this.items.add(orderItem);
67     }
68     
69 }

 常见操作:

 1 @Test
 2     public void save() {
 3         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
 4         EntityManager em = factory.createEntityManager();
 5         em.getTransaction().begin();//事务开始
 6         
 7         Order order = new Order();
 8         order.setAmount(34f);
 9         order.setOrderId("999");
10         
11         OrderItem orderItem1 = new OrderItem();
12         orderItem1.setProductName("football");
13         orderItem1.setSellPrice(90f);
14         
15         OrderItem orderItem2 = new OrderItem();
16         orderItem2.setProductName("basketball");
17         orderItem2.setSellPrice(100f);
18         
19         order.addOrderItem(orderItem1);
20         order.addOrderItem(orderItem2);
21 
22         em.persist(order);
23         
24         em.getTransaction().commit();
25         em.close();
26         factory.close();
27     }
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这