我使用Spring3.0+Hibernate3.3作为后台DAO访问数据库,其中我的dao都继承HibernateDaoSupport来的。然后我在jsp中调用
public void save(ModuleDatiQuestion transientInstance) {
log.debug("saving ModuleDatiQuestion instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
调用完后,再通过
public List findAll() {
log.debug("finding all ModuleDatiQuestion instances");
try {
String queryString = "from ModuleDatiQuestion";
return getHibernateTemplate().find(queryString);
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
访问数据库可以发现刚才提交的数据已经能查到了。从浏览器来看数据一切正常。而在这时,我打开SQLServer 2000,确无法打开表,提示“超时时间已到。在操作完成之前超时时间已过或服务器未响应”。
好像是由于Hibernate的事务机制把表锁定了,其他的程序(如SQL server 企业管理器)无法访问该表。
但是我已经把所有web访问页面都关闭了,还是打不开。除非我重启tomcat后才能通过SQL server 企业管理器打开表,但是刚才新提交的数据都没有保存。

解决方案 »

  1.   

    我是直接用Myeclipse8.6的逆向工程从数据库直接生成的Spring和Hibernate代码,没有做过什么改动。所有没有配置什么事务管理。
    经过我查找信息,终于找到了问题所在,是由于我Hibernate中使用了hibernate.connection.autocommit的默认配置(false),没有马上提交事务。只要在Hibernate的配置文件中加入:
    <property name="hibernate.connection.autocommit">true</property>问题就解决了!