JPA-一对多关系
JPA中,一对多关系使用@OneToMany标示
关系维护端:
package com.yl.demo1.bean.oneTomany; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; @Entity
public class OrderItem { private Integer id;
private String productName;
private Float sellPrice;
private Order order; @Id @GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=40, nullable=false)
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
@Column(nullable=false)
public Float getSellPrice() {
return sellPrice;
}
public void setSellPrice(Float sellPrice) {
this.sellPrice = sellPrice;
}
/**
* optional代表属性是否可选,
* true--代表字段可为空
* false--代表字段不允许为null
*
* @JoinColumn---指定外键的名称
*/
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH}, optional=true)
@JoinColumn(name="order_id")
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
} }
关系被维护端:
package com.yl.demo1.bean.oneTomany; import java.util.HashSet;
import java.util.Set; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* JPA中,1-m的双向关系中,多的一方为关系维护端,关系维护端服务外键记录的更新,关系被维护端是没有权利更新外键记录的
*
*
*/
@Entity
@Table(name="orders")
public class Order {
private String orderId;
private Float amount = 0f;
private Set<OrderItem> items = new HashSet<OrderItem>(); @Id @Column(length=12)
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
@Column(nullable=false)
public Float getAmount() {
return amount;
}
public void setAmount(Float amount) {
this.amount = amount;
}
/**级联操作
* CascadeType.REFRESH--select order, select OrderItem
* CascadeType.PERSIST--insert into Order, insert into OrderItem
* CascadeType.MERGE----当Order处于游离状态时,对Order更新,也会更新OrderItem--update Order, for(update OrderItem)
* CascadeType.REMOVE---delete Order, delete OrderItem
* 可以采用CascadeType.ALL包括上述四种.
* 上述四种方法只有调用相应的方法时才会触发。即EntityManager.refresh(),EntityManager.persist(),EntityManager.merge(), EntityManager.remove()
*
* *ToMany的fetch默认值为FetchType.LAZY
* *ToOne的fetch默认值为FetchType.EAGER
*
*
* mappedBy出现在关系的被维护端,它指定在关系维护端是由哪个属性进行维护关系
*/
@OneToMany(cascade={CascadeType.REFRESH, CascadeType.PERSIST}
, fetch=FetchType.LAZY
, mappedBy="order")
public Set<OrderItem> getItems() {
return items;
}
public void setItems(Set<OrderItem> items) {
this.items = items;
} public void addOrderItem(OrderItem orderItem) {
orderItem.setOrder(this);
this.items.add(orderItem);
} }
常见操作:
@Test
public void save() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 Order order = new Order();
order.setAmount(34f);
order.setOrderId("999"); OrderItem orderItem1 = new OrderItem();
orderItem1.setProductName("football");
orderItem1.setSellPrice(90f); OrderItem orderItem2 = new OrderItem();
orderItem2.setProductName("basketball");
orderItem2.setSellPrice(100f); order.addOrderItem(orderItem1);
order.addOrderItem(orderItem2); em.persist(order); em.getTransaction().commit();
em.close();
factory.close();
}
JPA-一对多关系的更多相关文章
- JPA总结——实体关系映射(一对多@OneToMany)
JPA总结——实体关系映射(一对多@OneToMany) 注意:本文出自“阿飞”的博客,如果要转载本文章,请与作者联系! 并注明来源: http://blog.sina.com.cn/s/blog_4 ...
- JPA中映射关系详细说明(一对多,多对一,一对一、多对多)、@JoinColumn、mappedBy说明
JPA中的映射关系 jpa中维护one to one ,one to many, many to one ,many to many 四种映射关系. 在每个关系中,双方中的一方在其表中拥有连接列.那么 ...
- JPA一对多关联
关于JPA一对多关联这里使用Order与OrderItem来模拟.一个Order可以关联多个OrderItem,而一个OrderItem只能关联一个Order.Order与OrderItem是一对多的 ...
- jpa 一对多and 多对一
配置: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2 ...
- spring data jpa 一对多查询
在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键. pa ...
- 10.Configure One-to-Many(配置一对多关系)【Code-First系列】
现在,我们将学习怎么配置一对多的关系. Visit Entity Relationship section to understand how EF manages one-to-one, one-t ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- [NHibernate]一对多关系(级联删除,级联添加)
目录 写在前面 文档与系列文章 一对多关系 一个例子 级联删除 级联保存 总结 写在前面 在前面的文章中,我们只使用了一个Customer类进行举例,而在客户.订单.产品中它们的关系,咱们并没有涉及, ...
- [NHibernate]一对多关系(关联查询)
目录 写在前面 文档与系列文章 一对多查询 总结 写在前面 上篇文章介绍了nhibernate的一对多关系如何配置,以及级联删除,级联添加数据的内容.这篇文章我们将学习nhibernate中的一对多关 ...
- [Fluent NHibernate]一对多关系处理
目录 写在前面 系列文章 一对多关系 总结 写在前面 上篇文章简单介绍了,Fluent Nhibernate使用代码的方式生成Nhibernate的配置文件,以及如何生成持久化类的映射文件.通过上篇的 ...
随机推荐
- 在Linux中,如何取出一个字符串的前5位
问: 在Linux中,如何取出一个字符串的前5位? 常用的一些方法如下: [tough@toughhou ~]$ str=abcdef [tough@toughhou ~]$ echo $str ab ...
- Swift与Objective-C的对比
WWDC 2014上苹果再次惊世骇俗的推出了新的编程语言Swift 雨燕, 这个消息会前没有半点风声的走漏.消息发布当时,会场一片惊呼,相信全球看直播的码农们当时也感觉脑袋被敲了一记闷棍吧.于是熬夜学 ...
- mysql子查询优化
,,,) ) LIMIT 第一种方式in where:2000ms SELECT COUNT(*) AS tp_count FROM xxx_b2c_orders o ,,,) and from xx ...
- EXTJS 3.0 资料 控件之 combo 用法
EXTJS combo 控件: 1.先定义store //年款 var comboData_ReleasYear = [ ['], ['], ['], ['] ]; 2.定义combo控件 { lay ...
- 【BZOJ 1087】[SCOI2005]互不侵犯King
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- kill 进程卡住,超时kill方法
还是有漏洞 ,万一 working.py未超时, kill_job.sh 会不会杀死别人的进程啊start.sh#!/bin/bash python working.py &python wo ...
- Workspace in use or cannot be created, choose a different one.--错误解决办法
eclipse 使用一段时间后,有时会因为一些故障自己就莫名奇妙的关闭了,再打开时有时没有问题,有时有会提示错误 Workspace Unavailable: 原因:出现这种情况一般是workspac ...
- jquery 数组和字典
1 数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- mac下安装应用及常用快捷键
从网络上下载的应用程序如何安装? 主要分类为两种:(dmg 和 pkg) 1.dmg类型 此类应用程序安装非常简单,只需要双击图标,然后将此应用程序图标直接拖拽到 application图标上即可 ...
- 【C++基础】关键字static 局部变量
1.局部变量 static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值: int test(int j){ static int i=10; i=i+j ...