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(); } }
相关文章推荐
- JPA中的多对多双向关联、级联操作、关系维护、延迟加载
- 传智播客jpa详解视频教程(七):JPA中的一对多双向关联与级联操作、延迟加载与关系维护
- 06讲、JPA中的一对多双向关联与级联操作、迟加载、关系维护
- JPA学习---第九节:JPA中的一对多双向关联与级联操作
- JPA 一对多延迟加载与关系维护
- JPA学习记录六(JPA中的一对多双向关联与级联操作)
- jpa的联合主键,级联操作和延迟加载
- jpa中延迟加载和关系维护问题
- 08讲、JPA中的多对多双向关联实体定义、注解设置与各项关系操作
- [译文]JPA的实施模式:双向关联与延迟加载之间的矛盾
- JPA中多对多双向关联的各项关系操作
- 对JPA实体关系管理双向关联的一些思考
- 【Hibernate】(4)Hibernate的多表操作、级联操作与延迟加载
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
- Hibernate中的延迟加载、实体关联单向一对多及双向一对多实体关联
- mysql优化----大数据下的分页,延迟关联,索引与排序的关系,重复索引与冗余索引,索引碎片与维护
- JAVAEE学习——hibernate03:多表操作详解、级联、关系维护和练习:添加联系人
- JPA中多对多关联延迟加载问题,failed to lazily initialize a collection of role
- java-hibernate框架4(hibernate多表操作,级联操作与延迟加载,多对多关系操作,hibernate缓存技术)
- jpa双向一对多级联操作