步骤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&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();
}
}
看能将表创建出来,并插入数据即可。