`
LC2586
  • 浏览: 25168 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JPA学习总结(三)--JPAOneToMany双向关联

阅读更多

步骤1.新建java项目:JPAOneToMany,将hibernate包以及mysql驱动包导入

 

步骤2.在类路径下新建xml文件persistence.xml,将其放入META-INF文件夹下,其代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
	version="1.0">
	<persistence-unit name="itcast" transaction-type="RESOURCE_LOCAL">
		<properties>
		
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>	
			<property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver" />
			<property name="hibernate.connection.username" value="root" />
			<property name="hibernate.connection.password" value="root" />
			<property name="hibernate.max_fetch_depth" value="3" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
		</properties>
	</persistence-unit>
</persistence>

 

步骤3.编写实体Bean类

Order代码如下:

package cn.itcast.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.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="Orders")
public class Order {
	private String orderid;
	private Float amout = 0f;
	private Set<OrderItems> items = new HashSet<OrderItems>();
	
	/*
	 *	@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="order")
	 *分别标注了关系为一对多,级联操作包括级联更新,级联查询
	 *加载方式默认为延迟加载:当@ManyToOne关系后为One默认为立即加载,关系后为Many,默认为延迟加载
	 *mappedBy="order" 指明order来维护这个关系
	 *
	 */
	@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="order")
	public Set<OrderItems> getItems() {
		return items;
	}
	public void setItems(Set<OrderItems> items) {
		this.items = items;
	}
	@Column(nullable=false)
	public Float getAmout() {
		return amout;
	}
	public void setAmout(Float amout) {
		this.amout = amout;
	}
	@Id @Column(length=12)
	public String getOrderid() {
		return orderid;
	}
	public void setOrderid(String orderid) {
		this.orderid = orderid;
	} 
	
	public void addOrderItems(OrderItems orderItems){
		orderItems.setOrder(this);
		this.items.add(orderItems);
	}
}

 

OrderItems代码如下:

 

 

package cn.itcast.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 OrderItems {
	private Integer id;
	private String productName;
	private Float sellPrice = 0f;
	private Order order;
	
	/*
	 *	@ManyToOne(cascade={CascadeType.REFRESH,CascadeType.MERGE},optional=false)
	 *分别标注了关系为多对一,级联操作包括级联更新,级联查询
	 *加载方式默认为立即加载:当@ManyToOne关系后为One默认为立即加载,关系后为Many,默认为延迟加载
	 *该属性标注为必须属性
	 *	@JoinColumn(name="order_id")
	 *外键值为order_id
	 */
	@ManyToOne(cascade={CascadeType.REFRESH,CascadeType.MERGE},optional=false)
	@JoinColumn(name="order_id")
	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.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;
	}
	
	
}

 

 

步骤4.创建junit测试

package junit.test;


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

import org.junit.BeforeClass;
import org.junit.Test;

import cn.itcast.bean.Order;
import cn.itcast.bean.OrderItems;


public class OneToManyTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Test public void save(){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("itcast");
		EntityManager em = factory.createEntityManager();
		em.getTransaction().begin();
		
		Order order = new Order();
		order.setOrderid("988");
		order.setAmout(70f);
		
		OrderItems items1 = new OrderItems();
		items1.setProductName("足球");
		items1.setSellPrice(30f);
		
		
		OrderItems items2 = new OrderItems();
		items2.setProductName("蓝球");
		items2.setSellPrice(40f);
		
/*		items1.setOrder(order);
		items2.setOrder(order);
		order.getItems().add(items1);
		order.getItems().add(items2);*/
		
		order.addOrderItems(items1);
		order.addOrderItems(items2);
		
		em.persist(order);		
		em.getTransaction().commit();
		em.close();
		factory.close();
	}
}

 

 

 

看能将表创建出来,并插入数据即可。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics