JPA-一对多关系

摘要:
在JPA中,一对多关系使用@OneToMany标记关系维护结束:1packagecom.yl.demo1.bean.oneMany;23 importjavax.persistence.ScascadeType;4importjavax.persistence.Column;5importjavax.persistence.Entity;6导入javax.persistence.Generat

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     }

免责声明:文章转载自《JPA-一对多关系》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浏览器的F12相关知识点机器学习 | 强化学习(5) | 价值函数拟合(Value Function Approximation)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[开源项目]Hibernate基本使用

开源项目(1)Hibernate基本使用 Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。  官网  http://hibernate.org/  以下为其原理和基本的结构示意图 一步一步简单讲述其基本应用 1、创建java...

【spring data jpa】使用jpa的@Query,自己写的语句,报错:org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' cannot be found on null

报错: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'status' cannot be found on null 如果检查 自己写的SQL语句完全没有问题的情况下,并且已经使用了@Param(value ="") 那么你需...

spring data jpa 原生查询(查一个json中的某一字段)

数据库: jpa 查询 java: 1 @Component("ediHistoryDAO") 2 public interface EdiHistoryDAO extends CrudRepository<EdiHistoryDO, Integer>{ 3 4 EdiHistoryDO findById(BigInteger id);...

JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEnti...

Spring Data JPA:解析JpaSpecificationExecutor &amp;amp; Specification

源码 在前面关于SimpleJpaRepository的文章[地址]中可以得知,SimpleJpaRepository间接实现了JpaSpecificationExecutor接口,本文就详细探究一下该接口。 JpaSpecificationExecutor的定义如下: /** * Interface to allow execution of {@li...

Spring Boot (三): ORM 框架 JPA 与连接池 Hikari

前面两篇文章我们介绍了如何快速创建一个 Spring Boot 工程《Spring Boot(一):快速开始》和在 Spring Boot 中如何使用模版引擎 Thymeleaf 渲染一个Web页面《Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面》,本篇文章我们继续介绍在 Spring Boot 中如何使用数据库。 1....