一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息

实体类

Customer

package com.jpa.yingshe;import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;@Table(name = "JPA_CUTOMERS")
@Entity
public class Customer {private Integer id;private String lastName;private String email;private Set<Order> orders = new HashSet<>();public Customer() {}public Customer(String lastName) {this.lastName = lastName;}@GeneratedValue(strategy = GenerationType.AUTO)@Idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name = "LAST_NAME", length = 50, nullable = false)public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@JoinColumn(name="CUSTOMER_ID")@OneToMany()public Set<Order> getOrders() {return orders;}public void setOrders(Set<Order> orders) {this.orders = orders;}
}

Order

package com.jpa.yingshe;import javax.persistence.*;@Table(name = "JPA_ORDERS")
@Entity
public class Order {private Integer id;private String orderName;private Customer customer;@GeneratedValue@Idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name = "ORDER_NAME")public String getOrderName() {return orderName;}public void setOrderName(String orderName) {this.orderName = orderName;}@JoinColumn(name="CUSTOMER_ID")@ManyToOne()public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}
}

测试

添加

package jpa.test;import com.jpa.yingshe.Customer;
import com.jpa.yingshe.Order;import org.junit.After;
import org.junit.Before;
import org.junit.Test;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;public class JPAyingshe {private EntityManagerFactory entityManagerFactory;private EntityManager entityManager;private EntityTransaction transaction;@Beforepublic void init() {entityManagerFactory = Persistence.createEntityManagerFactory("jpaname");entityManager = entityManagerFactory.createEntityManager();transaction = entityManager.getTransaction();transaction.begin();}@Afterpublic void destroy() {transaction.commit();entityManager.close();entityManagerFactory.close();}// 若是双向 1-n 的关联关系, 执行保存时// 若先保存 n 的一端, 再保存 1 的一端, 默认情况下, 会多出 2n 条 UPDATE 语句// 若先保存 1 的一端, 则会多出 n 条 UPDATE 语句// 在进行双向 1-n 关联关系时, 建议使用 n 的一方来维护关联关系, 而 1 的一方不维护关联系, 这样会有效的减少 SQL 语句// 注意: 若在 1 的一端的 @OneToMany 中使用 mappedBy 属性, 则 @OneToMany 端就不能再使用 @JoinColumn 属性了
    @Testpublic void testOneToManyPersist() {Customer customer = new Customer();customer.setEmail("mm@163.com");customer.setLastName("MM");Order order1 = new Order();order1.setOrderName("O-MM-1");Order order2 = new Order();order2.setOrderName("O-MM-2");//建立关联关系
        customer.getOrders().add(order1);customer.getOrders().add(order2);order1.setCustomer(customer);order2.setCustomer(customer);entityManager.persist(order1);entityManager.persist(order2);//执行保存操作
        entityManager.persist(customer);}
}

由 n 方来维护关联关系,1 的一方不维护

// 若在 1 的一端的 @OneToMany 中使用 mappedBy 属性, 则 @OneToMany 端就不能再使用 @JoinColumn 属性
// @JoinColumn(name="CUSTOMER_ID")
@OneToMany(mappedBy="customer")
public Set<Order> getOrders() {return orders;
}

再调整下保存顺序

@Test
public void testOneToManyPersist() {Customer customer = new Customer();customer.setEmail("mm@163.com");customer.setLastName("MM");Order order1 = new Order();order1.setOrderName("O-MM-1");Order order2 = new Order();order2.setOrderName("O-MM-2");//建立关联关系
    customer.getOrders().add(order1);customer.getOrders().add(order2);order1.setCustomer(customer);order2.setCustomer(customer);//执行保存操作
    entityManager.persist(customer);entityManager.persist(order1);entityManager.persist(order2);
}

转载于:https://www.cnblogs.com/jhxxb/p/10363147.html

7、JPA-映射-双向一对多相关推荐

  1. jeecg boot一对多新增的附表不会主键是一个string_测试开发专题:spring-boot如何使用JPA进行双向一对多配置...

    本片文章我们主要介绍spring-boot如何进行JPA的配置以及如何进行实体间的一对多配置. 依赖准备 要在spring-boot使用jpa需要在项目中有进入相关的依赖,pom文件里加入下面内容 & ...

  2. Hibernate关联关系映射-----双向一对多/多对一映射配置

    转自:http://blog.csdn.net/yifei12315/article/details/6985194 /// Hibernate: /// 双向关联就是有"一对多" ...

  3. JPA(七):映射关联关系------映射双向多对一的关联关系

    映射双向多对一的关联关系 修改Customer.java package com.dx.jpa.singlemanytoone;import java.util.Date; import java.u ...

  4. 使用JPA映射实体类和数据库中表时,实体类中定义的enum类型,数据库定义的是varchar类型,为什么使用JPA插入时字段变成了Integer类型

    解决方案,在使用枚举类型定义的字段上添加 注解@Enumerated(EnumType.STRING)即可解决问题 如果不使用该注解,则JPA映射的一直是Integer类型.

  5. jpa映射json_如何使用JPA和Hibernate映射JSON集合

    jpa映射json 介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,由于我们的杰出贡献者,我们添加了对类型安全集合的支持, ...

  6. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  7. 单向一对多和双向一对多

    <深入浅出Hibernate>中对单向一对多和双向一对多进行了一些介绍,其中提到:"由于是单向关联,为了保持关联关系,只能通过主控方对被控方进行及联更新."也就是说,对 ...

  8. Hibernate中双向一对多关联关系

    前边我们讲过了单向多对一的关联关系,即在Java代码-hbm.xml配置文件-数据库表格中只是描述了一种类中多个对象可以对应一个其他类对象的关联关系.我们需要在一个类中含有另一个类的引用变量,然后在包 ...

  9. JPA中实现双向一对多的关联关系

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  10. JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键

    通常在企业开发中,开发Dao层有两种做法:  (1)先建表,后再根据表来编写配置文件和实体bean.使用这种方案的开发人员受到了传统数据库建模的影响.  (2)先编写配置文件和实体bean,然后再生成 ...

最新文章

  1. 什么是Vue.js?||为什么要学习流行框架||框架和库的区别?||MVC和MVVM的关系图解
  2. rabbitmq java集群_RabbitMQ集群整合SpringBoot2.x
  3. oracle查询ora03114,求教:ora-03114错误从哪里排查?
  4. java range类_Java即时类| range()方法与示例
  5. C#操作Cookie
  6. JavaScript 精度问题以及JavaScript 浮点数陷阱及解决方案
  7. 第11章 递归分形树(《Python趣味创意编程》教学视频)
  8. Python办公自动化(八)|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转
  9. 乘积取中法matlab,迭代取中法、乘同余法及混合同余法产生随机数方法
  10. 牛客小白月赛3 I 排名【结构体排序/较复杂/细节】
  11. HTML5新规范和CSS3新特性
  12. java使用RunTime调用windows命令行
  13. 设计模式学习(四)工厂模式
  14. php微信开发视频教程_PHP微信开发视频资源推荐
  15. 苹果x和xsmax有什么区别_苹果iPhone12与iPhone12Pro有什么区别怎么选
  16. ffmpeg解析出的视频参数PAR,DAR,SAR的意义
  17. linux在用户登陆界面出现不断循环解决方法
  18. python,ipython,pycharm安装
  19. STM32F4定时器
  20. 《别用面包钓鲔鱼》--读书流水账no3

热门文章

  1. mysql通过局域网访问数据库_MySQL数据库之局域网内访问同一个mysql数据库
  2. 智慧交通day03-车道线检测实现05:透视变换+代码实现
  3. Vue项目中 css样式的作用域(深度作用选择器)
  4. LeetCode 2001. 可互换矩形的组数
  5. android studio windows,AndroidStudio的使用(Windows)
  6. python语言画心_python语言还是java如何用python画爱心
  7. 摄像头图像分析目标物体大小位置_单个运动摄像头估计运动物体深度,谷歌挑战新难题...
  8. python中importlib模块安装_Python中标准模块importlib详解
  9. 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
  10. ppt生成器_小米发布会ppt词云怎么做的