2017-04-20 42 views
0

我努力學習獲得和我的代碼load.Example是這樣---get方法何時命中數據庫?

public class StudentTest { 
    public static void main(String[] args) { 
     SessionFactory sessionfactory=new Configuration().configure().buildSessionFactory(); 
     Session session=sessionfactory.openSession(); 

     Student student=new Student(); 
     student.setName("Rajat"); 
     student.setDate(new Date()); 
     student.setCompany("Yash"); 

     session.persist(student); 

     Transaction t1=session.beginTransaction(); 
     session.getTransaction().commit(); 

     student.setName("Prashant"); 

     Student getStudent1=(Student)session.get(Student.class, 1); 
     System.out.println("-----------get------------------"); 
     System.out.println(getStudent1); 


     session.close(); 
     sessionfactory.close(); 
    } 

之間的區別,如果獲取訪問數據庫,爲什麼?輸出爲

Student [id=1, name=Prashant, company=Yash, date=Thu Apr 20 17:22:20 IST 2017] 

而在數據庫中它將名稱保存爲Rajat。

回答

0

從數據庫中直接獲取對象,因此執行get時會在日誌中看到select sql。

負載提供所要求的設置,當你實際使用的要求設置SQL將進行置將獲取

+0

我試圖負載,而不是得到那麼也將其返回名稱= PRASHANT和數據庫代理它是Rajat。在上面的例子中,我如何從數據庫中獲取實際數據? – Prashant

+0

是的,它會返回相同的數據,在System.out.println(getStudent1)行之前,如果你正在使用load,那麼你的變量持有一個proxing而不是對它自己的對象的引用,一旦打印被執行,它將獲取從數據庫中獲取數據並使用它,無論哪種方式獲取實際數據 –

+0

其實際數據如何?由於數據庫表具有name = Rajat,因此我得到的輸出是Prashant。 – Prashant