String hql = "from TradeRecord as tr where tr.TradeTime>= :startTime and tr.TradeTime <= :endTime and tr.CustomerId =:cid";
String[] params = { "startTime", "endTime", "cid" };
Object[] args = { startTime, endTime, new Long(cid) };
List list= this.getHibernateTemplate().findByNamedParam(hql,params,args);
這是你調用list中的對象的get方法,如果這個get方法需要lazy load,你將看到如下異常:
ERROR LazyInitializationException:19 - could not initialize proxy - the owning Session was closed
這個問題困擾的我都要跳樓了。
現在這樣就可以了:
Session session = this.getSession();
String hql = "from TradeRecord as tr where tr.TradeTime>= :startTime "
+ "and tr.TradeTime <= :endTime and tr.CustomerId =:cid";
String[] params = { "startTime", "endTime", "cid" };
Object[] args = { startTime, endTime, new Long(cid) };
Query query = session.createQuery(hql);
query.setDate("startTime",startTime);
query.setDate("endTime",endTime);
query.setLong("cid", cid);
List list = query.list();
也就是說,調用HibernateTemplate的findByNamedParam方法,他在執行完以后會把session自動關掉。
我現在在找源碼看個究竟。
這個問題雖然解決了,但是并不值得高興,因為我發現hibernate執行的SQL語句要比我用JDBC寫的sql語句多很多。我很懷疑hibernate的效率。
String[] params = { "startTime", "endTime", "cid" };
Object[] args = { startTime, endTime, new Long(cid) };
List list= this.getHibernateTemplate().findByNamedParam(hql,params,args);
這是你調用list中的對象的get方法,如果這個get方法需要lazy load,你將看到如下異常:
ERROR LazyInitializationException:19 - could not initialize proxy - the owning Session was closed
這個問題困擾的我都要跳樓了。
現在這樣就可以了:
Session session = this.getSession();
String hql = "from TradeRecord as tr where tr.TradeTime>= :startTime "
+ "and tr.TradeTime <= :endTime and tr.CustomerId =:cid";
String[] params = { "startTime", "endTime", "cid" };
Object[] args = { startTime, endTime, new Long(cid) };
Query query = session.createQuery(hql);
query.setDate("startTime",startTime);
query.setDate("endTime",endTime);
query.setLong("cid", cid);
List list = query.list();
也就是說,調用HibernateTemplate的findByNamedParam方法,他在執行完以后會把session自動關掉。
我現在在找源碼看個究竟。
這個問題雖然解決了,但是并不值得高興,因為我發現hibernate執行的SQL語句要比我用JDBC寫的sql語句多很多。我很懷疑hibernate的效率。
opensessionInviewer 就是解決這個問題的啊,spring自己帶一個filter可以處理這個問題,不需要代碼自己關心session的開關。
而這個session要不要關閉??
could not initialize proxy - the owning Session was closed
could not initialize proxy - the owning Session was closed
could not initialize proxy - the owning Session was closed
除非有更好的解決方案,否則這些都只是權益之計
能說的明白點嗎?洗耳恭聽!!謝謝