1. 程式人生 > >Hibernate LOAD和GET有什麼區別?

Hibernate LOAD和GET有什麼區別?

loadget都是從資料庫中查詢指定主鍵的記錄 。
相同點:都會先查詢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();

	}