用struts+hibernate+spring框架组合做了“网上订餐”项目。服务器用的是tomcat6.0.18
数据库是 mssql2000
问题描述:比如点击“订餐”按钮,点击后,程序会从数据库取餐馆信息并展示。
项目启动后,第一次点击,程序正常;第二次点击也正常;但是继续点击,浏览器就一直等待数据了,
调式程序发现,执行到读取数据库信息的代码时,程序就不运行,一直等待数据。
读取数据库的代码如下:public Shops selectShop(long shopId) {
return (Shops) this.getHibernateTemplate().load(Shops.class, shopId);
}
执行到这句就不能继续运行了。
我怀疑是数据库连接问题,但是 第一次、第二次执行此语句时却没有问题。
小弟实在不解,请大家帮帮忙啊跪求答案,谢谢
在线等待!

解决方案 »

  1.   

    数据库连接是这样的:
    <!-- 加载配置文件 -->
    <bean id="propertyConfiguer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:jdbc.properties</value>
    <value>classpath:hibernate.properties</value>
    </list>
    </property>
    </bean>

    <!-- 配置数据源DataSource -->
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${db.driver}"></property>
    <property name="url" value="${db.url}"></property>
    <property name="username" value="${db.username}"></property>
    <property name="password" value="${db.password}"></property>
    </bean>
    <!--配置sessionFactory  -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    ${hibernate.dialect}
    </prop>
    <prop key="hibernate.transaction">
    ${hibernate.transaction}
    </prop>
    <prop key="hibernate.show_sql">
    ${hibernate.show_sql}
    </prop>
    <prop key="hibernate.hbm2ddl.auto">
    ${hibernate.hbm2ddl.auto}
    </prop>
    </props>
    </property>
    <!-- 配置映射文件 -->
    <property name="mappingDirectoryLocations">
    <list>
    <value>classpath:com/hh/orders/po/</value>
    </list>
    </property>
    </bean>
      

  2.   

    数据库连接池没配好,或者没关闭session,hibernate中的session创建的太多
      

  3.   


    数据库连接池为什么没有没配好呢?上面的配置还缺少什么吗?
    没关闭session:什么时候关闭session呢?我只是重复 查询 就出问题了啊,查询的结果是放在session里,什么时候清除较好呢?
    hibernate中的session创建的太多:这个我不明白,怎样限制个数呢?或者自动清除哦?
    请赐教,谢谢
      

  4.   


    你上网查一下链接配置,你的配置里没有连接池的配置,如果你想不配链接池,用完之后要关闭连接。
    建议使用spring管理session,即配链接池,在配置链接池的情况下 spring管理连接即session,所以不需要你去管理
      

  5.   

    问题补充:
    public List<Item> selectItem(Map<Object, Object> params) {
    Criteria criteria = this.getSession().createCriteria(Item.class);
    criteria.add(Restrictions.allEq(params));
    return criteria.list();
    }
    这样做,session如何关闭呢?
      

  6.   

    配置没错,只要你访问数据库的类继承就行了
    BaseDao extends HibernateDaoSupport
    然后 Session session=super.getSession();
      

  7.   

    使用spring管理session, 在web.xml中配置一个openSessionInView试试。
      

  8.   

    spring来管理数据库的连接,不用自己手动关闭的
      

  9.   


    代码修改了,这样做:public List<Item> selectItem(final Map<Object, Object> params) {
    return (List<Item>)this.getHibernateTemplate().execute(new HibernateCallback() {
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    Criteria criteria = session.createCriteria(Item.class);
    criteria.add(Restrictions.allEq(params));
    return criteria.list();
    }
    });

    }
    谢谢大家的参与!