No puedo entender la diferencia entre load y get. el siguiente fragmento de código no funciona cuando doy session.load. Da una excepción de puntero nulo. Pero lo mismo funciona cuando estoy usando session.get().entendiendo session.get vs session.load método en hibernación
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);
}
También quiero entender como objeto Session se pasa a doInHibernate.?
¿cuándo comienza la sesión y cuándo termina?
Seguimiento de la pila es el siguiente
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)
¿Qué quiere decir con "no funciona"? ¿Cuál es la línea que causa una NullPointerException? –
Google for "at org.hibernate.tuple.AbstractEntityTuplizer.createProxy (AbstractEntityTuplizer.java:372)". Está ejecutando una versión anterior de Hibernate, y encontré varios motivos posibles para esta excepción (mala asignación, errores, etc.). No tiene mucho que ver con load vs get. –
@JB Nizet: ¡Muchas gracias! Comprobaré la configuración de mi compilación y actualizaré los viejos frascos. Muchas veces me he enfrentado a este problema y estoy aprendiendo a mavenizar los proyectos ... pero, ¿pueden ayudarme con otras dudas? ** cómo se pasa el objeto Session a doInHibernate.? ¿cuándo comienza la sesión y cuándo termina? ** –