Hibernate应用cascade&fetch
简单说明:cascade和fetch是Hibernate读取和写入数据库对象两个参数,cascade(层叠)管写入(Save、Update...);fetch管读取(Load、Get...)
一、cascade——它是用来指明做什么操作的时候关联对象绑定在一起:
a)CascadeType.ALL 表示所有情况
b)CascadeType.MERGE表示在Save或UPdate的情况
c)CascadeType.REFRESH=A 里面需要读B改过之后的数据
d)CascadeType.PERSIST
e)CascadeType.REMOVE
总之,用得比较多的是CascadeType.All
二、fetch——它是用来指明读取数据时关联对象的情况:
a)a)FetchType.EAGER
b)FetchType.LAZY(默认)
三、实例代码:
团队类:
package com.sean.model.one2many; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; /** * 一对多:团队对象 * * @author Sean 2013-2-26 * */ @Entity @Table(name = "p_group") public class Group { private int id; private String name; private Setpset = new HashSet (); @OneToMany(cascade = (CascadeType.ALL), fetch = FetchType.EAGER) public Set getPset() { return pset; } public void setPset(Set pset) { this.pset = pset; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
成员类:
package com.sean.model.one2many; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; /** * 一对多:成员对象 * * @author Sean 2013-2-26 * */ @Entity public class Person { private int id; private String name; private Group group; @ManyToOne(cascade = CascadeType.ALL) public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
测试方法:
public void testGroup2Person() { Group g = new Group(); g.setName("淘宝"); Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person(); Person p4 = new Person(); p1.setName("赵一"); // p1.setGroup(g); p2.setName("赵二"); // p2.setGroup(g); p3.setName("赵三"); // p3.setGroup(g); p4.setName("赵四"); // p4.setGroup(g); g.getPset().add(p1); g.getPset().add(p2); g.getPset().add(p3); g.getPset().add(p4); SessionFactory factory = new AnnotationConfiguration().configure() .buildSessionFactory(); Session session = factory.openSession(); session.beginTransaction(); session.save(g); session.getTransaction().commit(); session.close(); factory.close(); } public void testLoadGroup() { testGroup2Person(); SessionFactory factory = new AnnotationConfiguration().configure() .buildSessionFactory(); Session session = factory.openSession(); session.beginTransaction(); Group group = (Group) session.get(Group.class, 17); session.getTransaction().commit(); session.close(); factory.close(); for (Person i : group.getPset()) { System.out.println(i.getName()); } }