JPA学习笔记(8)——映射一对多关联关系
一对多关联关系
本文有很多和多对一是一样的,因此不会写得非常具体。
有看不懂的。能够參考JPA学习笔记(7)——映射多对一关联关系
Order实体类
package com.jpa.helloworld2;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
@Table(name="T_ORDER")
@Entity
public class Order {
@Column(name="ID")
@GeneratedValue
@Id
private Integer id;
@Column(name="ORDER_NAME")
private String orderName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
@Override
public String toString() {
return "Order [id=" + id + ", orderName=" + orderName + "]";
}
}
User实体类
package com.jpa.helloworld2;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Table(name="T_USER")
@Entity
public class User {
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private Integer id;
@Column(name="NAME")
private String name;
@JoinColumn(name="USER_ID")
@OneToMany
private List<Order> orders = new ArrayList<>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", orders=" + orders + "]";
}
}
一个User能够有多个Order。在User中有一个属性List<Order> orders
,这就是一对多关联关系。和多对一有些许不同。
一对多使用@OneToMany注解。外键关系还是使用@JoinColumn(name=”USER_ID”)。
注意:这里的@JoinColumn(name=”USER_ID”),尽管是写在User实体类中,在”USER_ID”这个字段却是加在T_ORDER表中。
插入
Order order1 = new Order();
order1.setOrderName("o1");
Order order2 = new Order();
order2.setOrderName("o2");
User user = new User();
user.setName("tom");
user.getOrders().add(order1);
user.getOrders().add(order2);
//插入
entityManager.persist(order1);
entityManager.persist(order2);
entityManager.persist(user);
这里三个对象插入的顺序怎么调换结果都是一样的。这一点和多对一有一些不同。
查询
System.out.println(entityManager.find(User.class,1));
一对多的查询。默认使用懒载入的载入策略,能够使用@OneToMany(fetch=FetchType.EAGER)
更改策略
删除
User user2 = entityManager.find(User.class, 1);
entityManager.remove(user2);
在多对一的时候。这样子删除会由于外键约束而抛出异常,可是一对多有一些不同。
能够看到,它是将USER_ID字段置为空。可是这显然不是我们想要的。
事实上我们能够使用cascade属性改变策略。比方改为级联删除。
@OneToMany(cascade=CascadeType.REMOVE)
cascade属性还有其它的值,大家自行百度或者看文档。
改动
User u = entityManager.find(User.class, 2);
u.getOrders().get(0).setOrderName("orderName");
JPA学习笔记(8)——映射一对多关联关系的更多相关文章
- [原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- JPA学习笔记(8)——映射双向一对多关联关系
双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...
- 攻城狮在路上(壹) Hibernate(五)--- 映射一对多关联关系
关联是有方向的,包含单向关联和双向关联.分别讨论.本文以客户Customer和订单Order来进行讨论:一个Customer有多个Order,每个Order对应一个Customer. Customer ...
- JPA学习笔记1——JPA基础
1.JPA简介: Java持久化规范,是从EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现.JPA是sun提出的一 ...
- Spring学习---JPA学习笔记
用了一段时间的Spring,到现在也只是处于会用的状态,对于深入一点的东西都不太了解.所以决定开始深入学习Spring. 本文主要记录JPA学习.在学习JPA之前,需要了解一些ORM的概念. ORM概 ...
- JPA学习笔记1——JPA基础 (转自CSDN)
http://blog.csdn.net/chjttony/article/details/6086298 1.JPA简介: Java持久化规范,是从EJB2.x以前的实体Bean(Entity be ...
- Hibernate学习笔记(3)---hibernate关联关系映射
一对一关联 假设有两个持久化类(实体类)User与Address,它们之间存在一对一的关系 1,通过主键关联(个人偏向另外一种) User.hbm.xml文件配置 <id name=" ...
- JPA学习笔记
一.JPA基础1.1 JPA基础JPA: java persistence api 支持XML.JDK5.0注解俩种元数据的形式,是SUN公司引入的JPA ORM规范 元数据:对象和表之间的映射关系 ...
- JavaEE高级-JPA学习笔记
*JPA概述 *JPA是什么? - Java Persistence API :用于对象持久化的API - Java EE 5.0平台标准的ORM规范,使得应用程序以统一的方式访问持久化层 - JPA ...
随机推荐
- jQuery clearQueue
clearQueue()方法与clearQueue()方法结合: .clearQueue()可用于删除通过.queue()方法添加到通用jQuery序列的任何函数. 示例: <!DOCTYPE ...
- 【SCM】关于Gradle与maven的几篇文章
Gradle官方文档:https://docs.gradle.org/current/userguide/installation.html#sec:download 使用 Gradle 命令行:ht ...
- thick置备和 thin置备,克隆,模板和快照
共享shared VMDK和共享RDM实验,参见http://wenku.it168.com/d_000773128.shtml 假如你有一个磁盘是100G的虚拟机,磁盘格式是厚置备,即Thick,当 ...
- Linux和Windows中查看端口占用情况
一.命令 netstat -lnt 或 netstat -tnlp 如: 二.较全 netstat -antulp 三.简单 ss -tanl 或 ss -tanlp 三.补充 Windows中使 ...
- MySql服务初始化、安装、启动
/// <summary> /// 安装并开启服务 /// </summary> public static bool InitAndStartService(string s ...
- 关于Storm 中Topology的并发度的理解
来自:https://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html htt ...
- 〖Linux〗安装和使用virtualenv,方便多个Python版本中切换
1. 安装pip easy_install pip 2. 安装virtualenvwrapper sudo pip install virtualenvwrapper 3. 使用virtualenv ...
- Knockout JS 增加、去除、修改绑定
Knockuot js 似乎只考虑过怎么绑定(ko.applyBindings()),却没考虑过怎么去除绑定,当修改了DOM内容,需要重新绑定时,发现似乎无能为力. 一.解决办法 这里有一个重新绑定的 ...
- codevs 3083 二叉树
题目描述 Description 同学们都知道二叉树的定义,也都知道3个结点的二叉树有5种, 现给你二叉树的结点个数n,要你编程输出不同形态二叉树的种数. 输入描述 Input Description ...
- 【原创+亲测可用】JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器
1.原理: 通过不同移动端的ua弹窗 获取user-agent 参数包含的信息,进行判断浏览器类型 在Android上 QQ内置环境的ua中有关键字 MQQBrowser, 并且后面包含一个[空白符+ ...