新聞中心
這篇文章給大家介紹Hibernate中Template如何使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),微信平臺(tái)小程序開發(fā),網(wǎng)站開發(fā),技術(shù)開發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術(shù)開發(fā)工程師。
spring的Hibernate Template的execute方法提供的回調(diào)接口具有Session作為參數(shù),但是實(shí)際上,默認(rèn)情況下,Hibernate Template傳遞給回調(diào)接口的session并不是org.hibernate.impl.SessionImpl類,而是SessionImpl類的一個(gè)Proxy類。之所以替換成為一個(gè)Proxy類,Hibernate Template的注釋說明,Proxy提供了一些額外的功能,包括自動(dòng)設(shè)置Cachable,Transaction的超時(shí)時(shí)間,Session資源的更積極的關(guān)閉等等。
private boolean exposeNativeSession = false; ... execute方法內(nèi)部: Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));
但是遺憾的是,Hibernate的DetachedCriteria的setExecutableCriteria方法卻要求將session參數(shù)強(qiáng)制轉(zhuǎn)為SessionImpl,但是spring傳過來的卻是一個(gè)Proxy類,因此就報(bào)錯(cuò)了。
public Criteria getExecutableCriteria(Session session) { impl.setSession( (SessionImpl) session ); // 要求SessionImpl,Spring傳遞的是Proxy return impl; }
解決方法,禁止Spring的Hibernate Template傳遞Proxy類,強(qiáng)制要求它傳遞真實(shí)的SessionImpl類,即給exexute方法增加一個(gè)參數(shù),提供參數(shù)為true,如下:
public List findByCriteria(final DetachedCriteria detachedCriteria) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); return criteria.list(); } }, true); }
附一個(gè)進(jìn)行模糊查詢的例子:
public PaginationSupport findPageByCriteria(int startIndex, int pageSize,
String sortColumnId, Boolean bSortOrder, final String likeValue) {DetachedCriteria detachedCriteria = DetachedCriteria .forClass(Time.class);
// like condition
if ((likeValue != null && likeValue.trim().length() > 0)) {
detachedCriteria.add(Restrictions.or(Restrictions.sqlRestriction
("statime like ?", "%" + likeValue + "%", Hibernate.STRING),Restrictions.
sqlRestriction("endtime like ?", "%" + likeValue + "%", Hibernate.STRING)));}
關(guān)于Hibernate中Template如何使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前名稱:Hibernate中Template如何使用
本文鏈接:http://fisionsoft.com.cn/article/gjephj.html