Hibernate表中的1+N的问题:1、所谓1+N的问题,意思是说我们希望查询一张表里面的数据,但是在执行sql语句时,会发生多条和另外对应表的sql语句。这样会降低数据库执行效率和性能。
2.解决1+N的问题的三种方式如下:
//使用session.creatQuery的方式,在对应的类中设置@ManyToOne(fetch=FetchType.LAZY) @Test public void testSelect1Topic() { Session session = sf.openSession(); session.beginTransaction(); //Listt =(List ) session.createCriteria(Topic.class).list(); // List t =(List ) session.createQuery("from Topic").list(); for (Topic to : t) { System.out.println(to.getId() + "-" + to.getTitle()); } session.getTransaction().commit(); session.close(); } //在对应的类中设置@BatchSize中size的属性的值 @Test public void testSelect2Topic() { Session session = sf.openSession(); session.beginTransaction(); //List t =(List ) session.createCriteria(Topic.class).list(); // List t =(List ) session.createQuery("from Topic").list(); for (Topic to : t) { System.out.println(to.getId() + "-" + to.getTitle()); } session.getTransaction().commit(); session.close(); } //使用join fetch @Test public void testSelect3Topic() { Session session = sf.openSession(); session.beginTransaction(); //List t =(List ) session.createCriteria(Topic.class).list(); List t =(List ) session.createQuery("from Topic t left join fetch t.category c").list(); for (Topic to : t) { System.out.println(to.getId() + "-" + to.getTitle()); } session.getTransaction().commit(); session.close(); }