`

JPA一对多和多对一关系

阅读更多

     1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录.

 

维护端注解

 

@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,
			CascadeType.MERGE, CascadeType.REMOVE },
                       fetch = FetchType.EAGER,
                       mappedBy = "order")

被维护端注解

 

@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)
@JoinColumn(name = "order_id")

 

 

 

对于一对多和多对一关系的现实中的例子是,网上购物时的订单和订单项。一个订单有多个订单项。多个订单项属于一个订单。

 

订单实体类:

package com.taoistwar.jpa.entity.onetomany;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "order_info")
public class OrderInfo {
	private Integer id;
	private String name;

	private Set<OrderItem> items = new HashSet<OrderItem>();

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	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;
	}

	@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,
			CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER, 
                       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);
	}

}

 重点在于:

       @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,
			CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER,
                       mappedBy = "order")
	public Set<OrderItem> getItems() {
		return items;
	}

 订单项实体类:

package com.taoistwar.jpa.entity.onetomany;

import javax.persistence.CascadeType;
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.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "order_item")
public class OrderItem {
	private Integer Id;
	private String name;

	private OrderInfo order;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer getId() {
		return Id;
	}

	public void setId(Integer id) {
		Id = id;
	}

	@Column(length = 20, nullable = true)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)
	@JoinColumn(name = "order_id")
	public OrderInfo getOrder() {
		return order;
	}

	public void setOrder(OrderInfo order) {
		this.order = order;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((Id == null) ? 0 : Id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		OrderItem other = (OrderItem) obj;
		if (Id == null) {
			if (other.Id != null)
				return false;
		} else if (!Id.equals(other.Id))
			return false;
		return true;
	}

}

 重点在于:

       @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)
	@JoinColumn(name = "order_id")
	public OrderInfo getOrder() {
		return order;
	}

 测试类:

package com.taoistwar.jpa.entity.onetomany;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.Test;


public class OneToMany {
	@Test
	public void save() {
		EntityManagerFactory emf = Persistence
				.createEntityManagerFactory("JPAPU");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		OrderInfo o = new OrderInfo();
		o.setName("订单一");
		OrderItem oi1 = new OrderItem();
		oi1.setName("产品一");
		o.addOrderItem(oi1);
		OrderItem oi2 = new OrderItem();
		oi2.setName("产品一");
		o.addOrderItem(oi2);
		OrderItem oi3 = new OrderItem();
		oi3.setName("产品一");
		o.addOrderItem(oi3);
		OrderItem oi4 = new OrderItem();
		oi4.setName("产品一");
		o.addOrderItem(oi4);
		em.persist(o);
		// UUID.randomUUID().toString();
		em.getTransaction().commit();
		emf.close();
	}
}
 

 

 

 

  • JPA.zip (5.7 MB)
  • 下载次数: 543
分享到:
评论

相关推荐

    JPA一对一,一对多,多对多关系映射

    JPA一对一,一对多,多对多关系映射,面向对象领域

    11_JPA详解_JPA中的一对多延迟加载与关系维护.zip

    11_JPA详解_JPA中的一对多延迟加载与关系维护.zip 11_JPA详解_JPA中的一对多延迟加载与关系维护.zip

    11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护

    11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护.rar

    JPA_2_一对多双向关联关系

    这是本人观看传智的视频,整理出来的完整的源码,及学习步骤,学了总会忘记,方便今后复习。代码可以直接运行,jar包完整,资源较大,分几块分享(1-5,按照学习步骤写的)。

    JPA常用关系实现例子

    JPA常用关系实现例子:一对一,一对多,多对一,多对多关系实现代码。

    JPA一对多映射关系解析

    为了方便广大开发朋友的需要特整理一下有关jpa映射关系,希望可以帮助到一些朋友。

    尚硅谷JPA视频教程

    JPA视频_映射单向一对多的关联关系 · 14. JPA视频_映射双向一对多的关联关系 · 15. JPA视频_映射双向一对一的关联关系 · 16. JPA视频_映射双向多对多的关联关系 · 17. JPA视频_二级缓存 · 18. JPA视频_...

    Spring+JPA(hibernate)整合 一对多及继承关系配置

    NULL 博文链接:https://prowl.iteye.com/blog/519618

    JPA-4 映射关联关系

    映射单向多对一、单向一对多、双向一对一、双向多对一和双向多对多关联关系的具体实现

    jpa的实体映射关系7种

    单向一对一 双向一对一 单向一对多 双向一对多 双向多对一 单向多对多 双向多对多

    JPA_学习过程整理

    最近比较清闲,终于有空好好把传智的jpa视频整理了一些,因为每次复习都看视频比较麻烦,索性自己整理一份文档,方便查看。 针对jpa入门级概念做了解释; 有一些基本的增删改查例子,及...重点学习一对多,多对多关系;

    hibernate的中所有关系映射(分别用xml和jpa实现)

    hibernate的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。

    OpenJPA 2.2.1 API (CHM格式)

     除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加简单,减少开发者的工作量,包括允许数据远程传输/离线处理、数据库/对象视图统一工具、使用缓存(Cache)提升企业应用...

    jpa-onetomany-springboot-maven-mysql:使用Spring Boot,Maven和MySQL的JPA一对多关系映射示例

    Spring Boot,Maven和MySQL的JPA一对多关系示例 指南 先决条件 JDK 1.8或更高版本 Maven 3或更高版本 MySQL 5.6或更高版本 叠放 Spring Data JPA Sprint Boot MySQL 跑 mvn spring-boot:run

    JPA、hibernate项目常用包

    现在引入了一组全新的 API:Java Persistence API JPA 以允许开发者管理 Java EE(甚至 SE)应用程序中的关系数据 另外 Sun 声称 Java Persistence API 表现了一些 Hibernate TopLink(二者都会在稍后讨论) JDO ...

    第25章_JPA概述.

    29.1主键生成策略 29.2 复合主键 29.3嵌入式主键 ...29.5 多对一和一对多关系的配置和使用 29.6 多对多的关系 29.7 把查询的多个值封装成对象 29.8 批量更新和删除 29.9 使用存储过程 29.10 实体生命周期回调方法

    bookManager:用于Spring Boot的Book Manager一对多关系项目

    下表关系图说明了此解决方案中设计的数据库: 一对多关系是指两个实体/表A和B之间的关系,其中A的一个元素/行可以与B的许多元素链接,但是B的成员仅与A的一个元素链接。 在此示例中,book_category和book表具有一对...

    jpa-day3-onetomany.zip

    Spring data jpa 多表联查 一对多的关系和操作多表的操作步骤 客户:一家公司 联系人:这家公司的员工

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

Global site tag (gtag.js) - Google Analytics