Tôi không thể hiểu sự khác biệt giữa tải và nhận được. đoạn mã sau không hoạt động khi tôi cung cấp session.load. Nó cho phép ngoại lệ con trỏ null. Nhưng cùng làm việc khi tôi đang sử dụng session.get().hiểu session.get vs session.load phương pháp trong hibernate
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);
}
Tôi cũng muốn hiểu cách đối tượng Phiên được chuyển đến doInHibernate.?
khi nào phiên bắt đầu và khi nào phiên kết thúc?
Stack trace như sau
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)
Ý bạn là gì bởi "không hoạt động"? Dòng gây ra một NullPointerException là gì? –
Google cho "tại org.hibernate.tuple.AbstractEntityTuplizer.createProxy (AbstractEntityTuplizer.java:372)". Bạn đang chạy một phiên bản cũ của Hibernate, và tôi tìm thấy một số lý do có thể cho ngoại lệ này (bản đồ xấu, lọ xấu, vv). Nó không có nhiều việc phải làm với tải vs get. –
@JB Nizet: Cảm ơn rất nhiều !!! Tôi sẽ kiểm tra cấu hình xây dựng của mình và sẽ cập nhật các lọ cũ mà tôi có nhiều lần phải đối mặt với vấn đề này và đang học cách quấy rối các dự án ... nhưng bạn có thể giúp tôi với những nghi ngờ khác được không. ** cách đối tượng Session được truyền tới doInHibernate. khi nào phiên bắt đầu và khi kết thúc? ** –