06讲、JPA中的一对多双向关联与级联操作、迟加载、关系维护

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.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
 
@Entity
@Table(name="BuyOrder")
public class Orders {
    private String orderid;
    private Double amount=0d;
    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 Double getAmount() {
        return amount;
    }
    public void setAmount(Double amount) {
        this.amount = amount;
    }
    //级联刷新和级联保存、级联合并(也可以叫级联更新)、级联删除延时加载,默认值*ToMany是延时加载,*ToOne默认加载属性是立即加载
    @OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE}
  ,mappedBy="orders")
    public Set<OrderItem> getItems() {
        return items;
    }
    public void setItems(Set<OrderItem> items) {
        this.items = items;
    }
    
    public void addOrderItem(OrderItem orderItem){
        orderItem.setOrders(this);
        this.items.add(orderItem);
    }
}
 
 
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 OrderItem {
    private Long id;
    private String productName;
    private Double sellPrice=0d;
    private Orders orders;
    
    @Id @GeneratedValue
    public Long getId() {
        return id;
    }
    
    public void setId(Long 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 Double getSellPrice() {
        return sellPrice;
    }
    
    public void setSellPrice(Double sellPrice) {
        this.sellPrice = sellPrice;
    }
    
    //optional代表可以没有,代表可以为空
    @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)
    @JoinColumn(name="orderid")
    public Orders getOrders() {
        return orders;
    }
    public void setOrders(Orders orders) {
        this.orders = orders;
    }
    
    
}
 
 
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.OrderItem;
import cn.itcast.bean.Orders;
 
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();
        
        Orders orders = new Orders();
        orders.setAmount(34d);
        orders.setOrderid("999");
        OrderItem orderItem1 = new OrderItem();
        orderItem1.setProductName("足球");
        orderItem1.setSellPrice(90d);
        OrderItem orderItem2 = new OrderItem();
        orderItem2.setProductName("篮球");
        orderItem2.setSellPrice(100d);
        orders.addOrderItem(orderItem1);
        orders.addOrderItem(orderItem2);
        
        em.persist(orders);
        em.getTransaction().commit();
        em.close();
        factory.close(); 
    }
}
posted @ 2013-02-22 11:06  范开胜  阅读(444)  评论(0编辑  收藏  举报