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

来源:互联网 发布:外国人用什么软件 编辑:程序博客网 时间:2024/05/20 22:49
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.*;@Entitypublic 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_idpublic Order getOrder() {return order;}public void setOrder(Order order) {this.order = order;}@Id @GeneratedValuepublic 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 {@BeforeClasspublic 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();}}


0 0
原创粉丝点击