您的位置:首页 > 运维架构

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

2014-07-27 22:15 591 查看
package cn.itcast.bean;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
@Entity
@Table(name="orders")//order与sql语句中的order by会发生冲突,因此必须改名
public class Order {
private String orderid;
private Float amount=0f;
private Set<OrderItem> items=new HashSet<OrderItem>();

/** CascadeType.REFRESH 级联刷新
*  CascadeType.PERSIST 级联插入,只有在调用persist方法时才有作用
*  CascadeType.MERGE 级联更新,只有在调用merge方法时才有作用
*  CascadeType.REMOVE 级联删除,只有在调用remove方法时才有作用
*  CascadeType.All 包括全部
*  fetch=FetchType.LAZY延迟加载(在many情况下,默认是延迟加载,在one情况下,默认是立即加载)
*  mappedBy="order"表示这个类是 关系被维护端,指明该实体内被维护的属性为order
**/
@OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE},fetch=FetchType.LAZY,mappedBy="order")
public Set<OrderItem> getItems() {
return items;
}
public void setItems(Set<OrderItem> items) {
this.items = items;
}
@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;
}
public void addOrderItem(OrderItem orderItem)//在订单类中添加一个“添加订单项”的方法,方便方法的调用
{
orderItem.setOrder(this);
this.items.add(orderItem);
}
}


package cn.itcast.bean;
import javax.persistence.Entity;
import javax.persistence.*;

@Entity
public class OrderItem {
private Integer id;
private String productName;
private Float sellPrice=0f;
private Order order;

/**
* 多的一方不需要 级联保存,不需要级联删除
* optional=true表示可选,表示此项可以为空
**/
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=true)
@JoinColumn(name="order_id")//外键名称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;
}
}


package junit.test;
import java.util.UUID;
import javax.persistence.*;
import org.junit.BeforeClass;
import org.junit.Test;
import cn.itcast.bean.Order;
import cn.itcast.bean.OrderItem;

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.setAmount(34f);
order.setOrderid("999");//UUID.randomUUID().toString()

OrderItem orderItem1=new  OrderItem();
orderItem1.setProductName("足球");
orderItem1.setSellPrice(90f);

OrderItem orderItem2=new  OrderItem();
orderItem2.setProductName("瑜珈球");
orderItem2.setSellPrice(30f);

order.addOrderItem(orderItem1);
order.addOrderItem(orderItem2);

em.persist(order);
em.getTransaction().commit();
em.close();
factory.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐