我無法理解load和get之間的區別。當我給session.load時,下面的一段代碼不起作用。它給出空指針異常。但是,當我使用session.get()時,它也可以工作。瞭解session.get vs session.load方法在休眠中
public Employee getEmployee(final String id){
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException,SQLException {
//return (Employee)session.load(Employee.class, id); doesn't work
return (Employee)session.get(Employee.class, id); //it works
}
};
return (Employee)hibernateTemplate.execute(callback);
}
我也想明白了Session對象是如何傳遞到doInHibernate?
會話何時開始以及何時結束?
堆棧跟蹤是如下
Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:781)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:774)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.orm.hibernate3.HibernateTemplate$CloseSuppressingInvocationHandler.invoke(HibernateTemplate.java:1282)
at $Proxy0.load(Unknown Source)
at hibernate.EmployeeDao$1.doInHibernate(EmployeeDao.java:25)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339)
at hibernate.EmployeeDao.getEmployee(EmployeeDao.java:29)
at hibernate.SpringHibernateTest.main(SpringHibernateTest.java:26)
你是什麼意思的「不工作」?什麼是導致NullPointerException的行? –
Google for「at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)」。你運行的是舊版本的Hibernate,我發現了這個異常的幾個可能的原因(壞映射,壞罐子等)。它與load和get沒有多大關係。 –
@JB Nizet:非常感謝!我會檢查我的構建配置,並將更新舊的罐子,我有很多次面臨這個問題,並正在學習項目的初始化......但你能否幫助我解決其他疑問.i.e。 ** Session對象如何傳遞給doInHibernate。 會話何時開始以及何時結束?** –