Hibernate LOAD和GET有什麼區別?
阿新 • • 發佈:2019-01-05
load和get都是從資料庫中查詢指定主鍵的記錄 。
相同點:都會先查詢session快取,若快取中有,則直接返回。
不同點:load認為資料庫中一定是有這條記錄的,所以若不存在,則先會建立一個代理物件,當真正使用這個物件的資料時,才會再去查詢二級快取和資料庫,這就是所謂的延遲載入。若查不到,則返回ObjectNotFoundException。而對於get來說,則會直接依次查詢二級快取和資料庫,查不到的話,則直接返回null。
@Test public void HibernateClose() { Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory = configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); // 無-------到持久化 // session可以關閉 // get 資料庫沒有相應的值這回返回Null // Temp temp2 = session.get(Temp.class, "a1"); // System.out.println("get" + temp2); // 不能關閉session // load 資料庫沒有相對應的記錄則會返回ObjectNotFoundException Temp temp1 = session.load(Temp.class, "a1"); System.out.println("load" + temp1); //關閉 session.close(); //提交 transaction.commit(); }