Posted on 2007-05-28 15:27
change 阅读(1552)
评论(0) 编辑 收藏
比如在删除一条在数据库操作的时候 我们一般是类似是这样使用:
this.getHibernateTemplate().delete("from Information where INFOID='"+infoid.trim()+"'");
然而具体在spring内部是怎么操作的呢?
delete()----->excecute()----->执行回调方法HibernateCallback .doInHibernate()。
下面来让我们来直接看一下spring的源代码。
//hibernate回调接口
public interface HibernateCallback {
Object doInHibernate(Session session) throws HibernateException, SQLException;
}
//
package org.springframework.orm.hibernate;
public class HibernateTemplate extends HibernateAccessor implements HibernateOperations {
//。。。。。。。。。。。。。。。。
public int delete(final String queryString) throws DataAccessException {
Integer deleteCount = (Integer) execute(new HibernateCallback() {//定义回调实现
public Object doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
return new Integer(session.delete(queryString));//此处有hibernate的实现操作
}
});
return deleteCount.intValue();
}
public Object execute(HibernateCallback action) throws DataAccessException {
Session session = (!isAllowCreate() ? SessionFactoryUtils.getSession(getSessionFactory(), false) :
SessionFactoryUtils.getSession(getSessionFactory(), getEntityInterceptor(), getJdbcExceptionTranslator()));
boolean existingTransaction = TransactionSynchronizationManager.hasResource(getSessionFactory());
if (!existingTransaction && getFlushMode() == FLUSH_NEVER) {
session.setFlushMode(FlushMode.NEVER);
}
try {
Object result = action.doInHibernate(session);//此处调用hibernatecallback回调接口即hibernate的实现
flushIfNecessary(session, existingTransaction);
return result;
}
catch (HibernateException ex) {
throw convertHibernateAccessException(ex);
}
catch (SQLException ex) {
throw convertJdbcAccessException(ex);
}
catch (RuntimeException ex) {
// callback code threw application exception
throw ex;
}
finally {
SessionFactoryUtils.closeSessionIfNecessary(session, getSessionFactory());
}
}
//。。。。。。。。。。。。。。
//其他操作类似
}