码迷,mamicode.com
首页 > 其他好文 > 详细

JPA实体属性one-to-many关系映射

时间:2014-12-11 20:52:52      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:jpa实体属性one-to-many关系   jpa   one-to-many关系映射   


(1)下边有两个实体类Order.java和OrderItem.java  前者是作为one 后者是many的一方(也就是说一个订单可以包含多个订单项)

下边是他们的映射关系

(2)Order.java代码如下

package com.lc.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="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;
	}

	// 级联操作 若使用全部的方法可以使用all
	// @OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
	
	//fetch的默认值是:如果是得到many的一方 默认的是延迟加载
	//mappedBy表示关系被维护端,是在OrderItem类总的哪一个属性维护的
	@OneToMany(cascade = CascadeType.ALL,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);
	}
}

(3)OrderItem.java 代码

package com.lc.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;
import javax.persistence.Table;

@Entity
public class OrderItem {
	private Integer id;
	private String produceName;
	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 getProduceName() {
		return produceName;
	}

	public void setProduceName(String produceName) {
		this.produceName = produceName;
	}

	@Column(nullable = false)
	public Float getSellPrice() {
		return sellPrice;
	}

	public void setSellPrice(Float sellPrice) {
		this.sellPrice = sellPrice;
	}

	// fetch 在one的一方默认为立即加载
	// optional表示是否可以为空 true表示可以为空
	// JoinColumn表示外键的名称,通过name指定
	@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)
	@JoinColumn(name = "order_id")
	public Order getOrder() {
		return order;
	}

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

}

(4)测试程序

package com.lc.junitTest;

import java.util.UUID;

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

import org.junit.Test;

import com.lc.bean.Order;
import com.lc.bean.OrderItem;

public class OneToManyTest {
	
	@Test
	public void save(){
		EntityManagerFactory factory =  Persistence.createEntityManagerFactory("jpatest");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		
		//创建一个订单
		Order order = new Order();
		order.setAmount(34f);
		order.setOrderid("999");
		
		//创建一个订单项
		OrderItem orderItem1 = new OrderItem();
		orderItem1.setProduceName("足球");
		orderItem1.setSellPrice(90f);
		order.addOrderItem(orderItem1);
		
		//创建第二个订单项
		OrderItem orderItem2 = new OrderItem();
		orderItem2.setProduceName("羽毛球");
		orderItem2.setSellPrice(56f);
		order.addOrderItem(orderItem2);
		
		//保存订单
		em.persist(order);
		
		em.getTransaction().commit();
		factory.close();
	}
}

(5)检验结果

bubuko.com,布布扣bubuko.com,布布扣



JPA实体属性one-to-many关系映射

标签:jpa实体属性one-to-many关系   jpa   one-to-many关系映射   

原文地址:http://blog.csdn.net/xlgen157387/article/details/41870821

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!