7、JPA-映射-双向一对多

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

 

实体类

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(二十)-广域网-PPP协议和HDLC协议

一.广域网 广域网&#xff0c;通常跨接很大的物理范围&#xff0c;所覆盖的范围从几十公里到几千公里&#xff0c;它能连接多个城市或国家&#xff0c;远距离通信&#xff0c;形成国际性的远程网络。 广域网的通信子网主要使用分组交换技术。广域网的通信子网可以利用分组交换…

导弹防御系统,如何跟蜻蜓的大脑学习计算?

来源&#xff1a;大数据文摘作者&#xff1a;Frances Chance多雨的夏季&#xff0c;蜻蜓最为常见&#xff0c;这些美丽的生物的飞行速度极快&#xff0c;狩猎能力也极为出色&#xff1a;蜻蜓狩猎的成功率捕获了高达95% &#xff0c;它们一天可以吃掉数百只蚊子。这种狩猎能力吸…

分布式文件系统HDFS

1.HDFS简介 1.1 Hadoop Distributed File System&#xff0c;简称HDFS。解决海量数据的分布式存储。 1.2 分布式文件系统 计算机集群中内部机器通过光纤高速交换机进行连接&#xff0c;机架之间通过宽带更高的光纤交换机连接。 有一个主节点机器其他的为从节点机器&#xff…

小程序开发初体验,从静态demo到接入Bmob数据库完全实现

之前我胖汾公司年会、问我能不能帮忙搞个小程序方便他们进行游戏后的惩罚/抽奖使用、出了个简单的设计图、大概三天左右做了个简单的小程序、目前提交审核了。对于写过一小段时间vue来说小程序很容易上手、写法和结构差不多。 ----------------- 这里整理的内容大致划分四个部分…

演讲实录丨徐宗本院士:如何突破机器学习的先验假设?

来源&#xff1a;中国人工智能学会2021年6月5日至6日&#xff0c;由中国科学技术协会、中国科学院、中国工程院、浙江省人民政府指导&#xff0c;中国人工智能学会、杭州市人民政府主办&#xff0c;杭州市余杭区人民政府筹备组承办&#xff0c;浙江杭州未来科技城管理委员会具体…

hbase单机模式配置

1.软件 https://pan.baidu.com/s/1mgPA8s02FFyPqcc9DmR-FA 提取码: 337t 2.在安装hbase之前&#xff0c;确保你的电脑已经安装Hadoop3.1.3&#xff0c;hbase对Hadoop具有版本依赖。 3.将hbase压缩文件解压到/usr/local目录下&#xff0c;先切换到压缩文件所在目录&#xff0…

QT QTransform与QMatrix 有啥区别?

刚开始学习QT&#xff0c;我使用的是QT5.12进行开发&#xff0c;要不时地查阅QT的官方帮助文档~ 仔细阅读QT官方帮助QTransform类以及QMatrix类&#xff0c;发现两个类的作用描述一模一样&#xff08;“The QTransform class specifies 2D transformations of a coordinate sys…

hbase伪分布式配置

1.在单机模式的基础上进行配置&#xff0c;打开hbase-env.sh。 vim /usr/local/hbase/conf/hbase-env.sh2.配置HBASE_CLASSPATH为hadoop安装目录下的conf目录&#xff0c;即 /usr/local/hadoop/conf。JAVA_HOME、HBASE_MANAGES_ZK之前已经配置好了。 export HBASE_CLASSPATH/…

机器学习是科学还是“炼金术”?

作者:Samuel Flender译者:王强策划: 刘燕在实证领域&#xff0c;科学的严谨性是从假设开始塑造的。业界对机器学习研究的科学严谨性的质疑声越来越多了。在 2017 年 NIPS 会议上的一场 演讲 中&#xff0c;当时就职于谷歌 AI 的 Ali Rahimi 和 Ben Recht 认为 ML 已经成为了一种…

谷歌发布史上最强人类大脑「地图」,在线可视3D神经元「森林」!

来源&#xff1a;机器学习研究组订阅突触&#xff0c;是神经网络的「桥梁」。我们知道&#xff0c;人类大脑有860亿个神经元&#xff0c;因为有了突触&#xff0c;才可以把神经元上的电信号传递到下一个神经元。长久以来&#xff0c;科学家们一直梦想通过绘制完整的大脑神经网络…

javaweb c3p0连接oracle12c

最近在搞javaweb&#xff0c;在连接池上碰到了一系列的问题&#xff0c;在Junit测试时&#xff0c;oracle12c报错&#xff1a; ORA-28040: 没有匹配的验证协议 百度解决&#xff1a;修改 $ORACLE_HOME/network/admin/sqlnet.ora 加入如下:   SQLNET.ALLOWED_LOGON_VERSION8 之…

数学的意义——席南华院士科普讲座实录

来源&#xff1a;中国数学会编辑&#xff1a;nhyilin谢谢主持人的介绍&#xff0c;谢谢大家在周末星期六的下午听这个报告。我今天要说的是“数学的意义”。数学&#xff0c;要说爱你不容易&#xff0c;不管你是天才还是庸人&#xff0c;都是它虐待的对象&#xff0c;差别在于有…

C#穿透session隔离———Windows服务启动UI交互程序

在Windows服务里面启动其他具有界面的应用程序&#xff0c;需要穿透session隔离&#xff0c;尝试了很多种方法&#xff0c;都可行&#xff0c;现在一一列举下来&#xff0c;并写下几个需要注意的地方。 需要注意的地方 首先要将服务的Account属性设置为LocalSystem&#xff0c;…

谈谈相控阵雷达为何如此先进

作者&#xff1a;寒木钓萌来源&#xff1a;电子万花筒对于很多人来说&#xff0c;相控阵雷达非常耳熟&#xff0c;但它的原理又是什么呢&#xff1f;传统雷达与相控阵雷达之区别要说相控阵雷达的原理&#xff0c;就不得不提一下传统雷达的工作方式。影视中&#xff0c;如果非要…

华为在5.5G未来技术演进的六个方向!

来源&#xff1a;5G产业园”2021年8月3日&#xff0c;华为和中国移动在北京召开主题为“双链融合&#xff0c;共创5G可持续发展未来”的5G-Advanced创新产业峰会。华为常务董事、ICT产品与解决方案总裁汪涛在峰会上发表了“合作创新&#xff0c;5.5G使能万物智联”的主题演讲&a…

引用传递

引用传递的核心意义&#xff1a; 同一块堆内存空间可以被不同的栈内存所指向&#xff0c;不同的栈内存可以对同一个堆内存进行内容的修改。 实例1&#xff1a; class Message {private int num 10;public Message(int num){this.num num; //2.this是代表msg这个对象&#…

线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

1 程序、进程、线程之间的区别与联系 三者之间的形象化理解&#xff1a; * 程序&#xff1a;代码实现了功能&#xff0c;就是程序&#xff0c;是静态的&#xff1b; * 进程&#xff1a;执行中的程序就是进程&#xff0c;是动态的&#xff1b; * 线程&#xff1a;进程内的一个执…

官方全面解读“5G+工业互联网”

来源&#xff1a;工信部网站未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;大脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;大脑技术和企业图…

为什么要学数学?因为这是一场战略性的投资

来源&#xff1a;数学内参如果将数学学习的好坏仅仅理解为“刷题”的数量和速度&#xff0c;那充其量也只能成为一名熟练的数学工匠。我们所受的数学训练&#xff0c;所领会的数学思想和精神&#xff0c;所获得的数学教养&#xff0c;无时无刻不在发挥着积极的作用&#xff0c;…

滤波 放电速度比充电慢 模电

我不理解为什么这里放电速度比充电速度慢&#xff1f; 因为充电时间常数小&#xff0c;而放电时间常数大 转载于:https://www.cnblogs.com/china520/p/10389477.html