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