JPA(三)之实体关系一对多(多对一)
1.背景介绍:
对于购买商品时,订单信息(Order)和订单商品信息(OrderItem)的关系就是一对多的关系。
2.实体bean:
Order.java代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package com.sinoi.bean;
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.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table (name= "my_order" )
public class Order {
@Id @Column (length= 12 )
private String orderId;
@Column (nullable= false )
private Float amount = 0f;
@OneToMany (cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
mappedBy= "order" )
private Set<OrderItem> orderItems = new HashSet<OrderItem>();
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this .orderId = orderId;
}
public Float getAmount() {
return amount;
}
public void setAmount(Float amount) {
this .amount = amount;
}
public Set<OrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(Set<OrderItem> orderItems) {
this .orderItems = orderItems;
}
public void addOrderItem(OrderItem orderItem) {
orderItem.setOrder( this ); //这句代码不加也可!
this .orderItems.add(orderItem);
}
}
|
OrderItem.java代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package com.sinoi.bean;
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 {
@Id @GeneratedValue
private Integer id;
@Column (length= 20 , nullable= false )
private String productName;
@Column (nullable= false )
private Float sellPrice;
@ManyToOne (cascade={CascadeType.REFRESH, CascadeType.MERGE}, optional= false )
@JoinColumn (name= "item_order_for" )
private Order order;
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this .order = order;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this .id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this .productName = productName;
}
public Float getSellPrice() {
return sellPrice;
}
public void setSellPrice(Float sellPrice) {
this .sellPrice = sellPrice;
}
}
|
3.测试代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package junit.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.Test;
import com.sinoi.bean.Order;
import com.sinoi.bean.OrderItem;
public class UnitTest {
@Test
public void save() {
EntityManagerFactory entityManagerFactory = Persistence
.createEntityManagerFactory( "unitname" );
EntityManager entityManager = entityManagerFactory
.createEntityManager();
entityManager.getTransaction().begin();
Order order = new Order();
order.setOrderId( "jfdkf323" );
order.setAmount(232f);
OrderItem orderItem = new OrderItem();
orderItem.setProductName( "basketball" );
orderItem.setSellPrice(221f);
OrderItem orderItem2 = new OrderItem();
orderItem2.setProductName( "football" );
orderItem2.setSellPrice(11f);
orderItem.setOrder(order);
orderItem2.setOrder(order);
order.addOrderItem(orderItem);
order.addOrderItem(orderItem2);
entityManager.persist(order);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}
}
|
4.配置文件persistence.xml和前面JPA(一)、、、一样,在此省略
JPA(三)之实体关系一对多(多对一)相关推荐
- PD的CDM模型中的三种实体关系
转自:http://www.cnblogs.com/syf/articles/2480580.html PD的CDM模型中的三种实体关系 CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设 ...
- sql语句之多表关系 一对多 多对多
多表的关系介绍 在实际的开发过程中,项目一定是有多张表的,且这些表之间是都有关系的 表与表之间的关系分类:一对一 一对多 多对多 一对一:A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一 ...
- 【Spring Data JPA自学笔记五】一对多、多对多和级联
文章目录 数据库表的关系 一对多 多对多 Spring Data JPA实现一对多 基本配置 实现一对多 放弃维护权 Spring Data JPA实现多对多 基本配置 实现多对多 级联 之前的所有操 ...
- ORM框架之Spring Data JPA(三)高级查询---复杂查询
一.spring data jpa高级查询 1.1Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data ...
- oracle基础|数据库模型|实体-关系图(E-R图)|什么是一对一、一对多、多对多
目录 一.前言 二.实体-关系图(E-R图) 1.实体(Entity): 2.属性(Attribute):
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- 单个实体内部和三个实体内部之间的关系
单个实体内部也有一对一.一对多.多对多的关系 一对一:独生子女家庭是一个实体,一个爸爸有一个孩子,一个孩子也有一个爸爸 一对多:员工是一个实体,员工中存在着领导与被领导的关系.一个具有领导地位的员工可 ...
- SQLAlchemy_定义(一对一/一对多/多对多)关系
SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...
- 【Hibernate】Hibernate实体关系映射——单边的多对一关系
单边的多对一关系 单边的多对一关系与单边的一对多关系刚好相反,多方有一方的引用,一方没有多方的引用,但是他们的数据表间的关系是一样的.例如:论文与论文类别: 具体实现如下: Type实体类的java注 ...
最新文章
- shell中判断控制语句 if case
- UIAlertView的使用方法
- Hive的内置数据类型
- CSP 1.0 语言规范
- Workbench has not been created yet
- windows 安装mongodb
- oracle导出用户下单表或者多表,导入到别的服务器用户下
- 以太坊智能合约Java_以太坊:调用已部署的智能合约
- vivado中的OOC技术
- MXF到MP4转换器:如何轻松地将MXF转换成MP4
- 如何切换水经注地图下载器中的小数度和度分秒显示
- 汇编语言教程 -- 寄存器
- 超好用的数学公式识别软件mathpix!
- 计算机病毒无法破坏压缩文件,求解压缩文件拒绝访问是怎么回事?
- 网站服务器如何直接播放视频,视频放服务器链接直接播放
- Mac设置重置Python3环境
- webdav使用mysql_如何设置WebDAV与MySQL认证Apache2(Debian Etch)
- 矩阵求和 c语言 简单易懂
- CPU 到底是怎么识别代码的?
- python if else写在一行_关于python:将if-elif-else语句放在一行上?
热门文章
- 《高性能JavaScript》第一章 加载和执行
- Spring IoC 源码导读
- Java8 Hashtable 源码阅读
- VTK:线性挤压用法实战
- boost::hana::test::TestSearchable用法的测试程序
- boost::histogram::histogram::fill用法的测试程序
- boost::geometry::model::box用法的测试程序
- boost::core模块实现交换std的dateorder
- DCMTK:DSRDocumentTree,DSRDocumentSubTree,DSRDocumentTreeNode和DSRContentItem类的测试程序
- VTK:可视化之Camera