文章出處
Hibernate表中的1+N的問題:1、所謂1+N的問題,意思是說我們希望查詢一張表里面的數據,但是在執行sql語句時,會發生多條和另外對應表的sql語句。這樣會降低數據庫執行效率和性能。
2.解決1+N的問題的三種方式如下:
//使用session.creatQuery的方式,在對應的類中設置@ManyToOne(fetch=FetchType.LAZY) @Testpublic 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 @Testpublic 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();}
看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170204/97764.html
文章列表
全站熱搜