读书人

hibernate N+1有关问题解决方法

发布时间: 2013-09-08 15:21:21 作者: rapoo

hibernate N+1问题解决办法
package com.test.hiberenate.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import org.hibernate.annotations.BatchSize;@Entity//@BatchSize(size=10)public class Category {private int id;private String name;@Id@GeneratedValuepublic 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.test.hiberenate.model;import java.util.Date;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;@Entitypublic class Topic {private int id;private String title;private Date createDate;private Category category;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}@ManyToOne//(fetch = FetchType.LAZY)public Category getCategory() {return category;}public void setCategory(Category category) {this.category = category;}}

?

package com.test.hibernate.model;import java.util.Date;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import com.test.hiberenate.model.Category;import com.test.hiberenate.model.Topic;public class HibernateTest {private static SessionFactory sf = null;@BeforeClasspublic static void beforeClass() {try {if (sf == null) {sf = new Configuration().configure().buildSessionFactory();}} catch (HibernateException e) {e.printStackTrace();}}@AfterClasspublic static void afterClass() {sf.close();}@Testpublic void testSchemaExport() {new SchemaExport(new Configuration().configure()).create(false, true);}@Testpublic void testSave() {Session session = sf.openSession();session.beginTransaction();for (int i = 0; i < 10; i++) {Category c = new Category();c.setName("c" + i);Topic t = new Topic();t.setTitle("t" + i);t.setCreateDate(new Date());t.setCategory(c);session.save(c);session.save(t);}session.getTransaction().commit();session.close();}// N+1@Testpublic void testQuery1() {Session session = sf.openSession();session.beginTransaction();List<Topic> topics = (List<Topic>) session.createQuery("from Topic").list();for (Topic t : topics) {System.out.println(t.getId() + "-" + t.getTitle());}session.getTransaction().commit();session.close();}// fetch = FetchType.LAZY@Testpublic void testQuery2() {Session session = sf.openSession();session.beginTransaction();List<Topic> topics = (List<Topic>) session.createQuery("from Topic").list();for (Topic t : topics) {System.out.println(t.getId() + "-" + t.getTitle());System.out.println(t.getCategory().getName());}session.getTransaction().commit();session.close();}// @BatchSize(size=10)@Testpublic void testQuery3() {Session session = sf.openSession();session.beginTransaction();List<Topic> topics = (List<Topic>) session.createQuery("from Topic").list();for (Topic t : topics) {System.out.println(t.getId() + "-" + t.getTitle());System.out.println(t.getCategory().getName());}session.getTransaction().commit();session.close();}// left join fetch@Testpublic void testQuery4() {Session session = sf.openSession();session.beginTransaction();List<Topic> topics = (List<Topic>) session.createQuery("from Topic t left join fetch t.category c").list();for (Topic t : topics) {System.out.println(t.getId() + "-" + t.getTitle());System.out.println(t.getCategory().getName());}session.getTransaction().commit();session.close();}@Testpublic void testQuery5() {Session session = sf.openSession();session.beginTransaction();List<Topic> topics = (List<Topic>) session.createCriteria(Topic.class).list();for (Topic t : topics) {System.out.println(t.getId() + "-" + t.getTitle());System.out.println(t.getCategory().getName());}session.getTransaction().commit();session.close();}}

?

读书人网 >编程

热点推荐