Hibernate Spring3MVC查询在几次调用后未执行

Hibernate Spring3MVC查询在几次调用后未执行,hibernate,spring-mvc,spring-3,Hibernate,Spring Mvc,Spring 3,我正在制作一个Spring 3 MVC Hibernate web应用程序。我面临的问题是,应用程序工作正常,但当我调用6或7个以上的数据库调用时,问题就会出现。这意味着尝试通过执行少量查询来访问数据。前6到7个查询被执行,但在那之后。查询停止执行意味着应用程序完全没有响应。非常奇怪的情况。我正在粘贴servelet xml服务、实现控制器和dao请指导我在搜索中哪里出错,但仍然没有解决方案 <!-- Handles HTTP GET requests for /resources

我正在制作一个Spring 3 MVC Hibernate web应用程序。我面临的问题是,应用程序工作正常,但当我调用6或7个以上的数据库调用时,问题就会出现。这意味着尝试通过执行少量查询来访问数据。前6到7个查询被执行,但在那之后。查询停止执行意味着应用程序完全没有响应。非常奇怪的情况。我正在粘贴servelet xml服务、实现控制器和dao请指导我在搜索中哪里出错,但仍然没有解决方案

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/MyData/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <!-- Spring Database DataSource -->
    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <beans:property name="url"
            value="jdbc:mysql://localhost:3306/health" />
        <beans:property name="username" value="***" />
        <beans:property name="password" value="***" />
    </beans:bean>

    <!-- Hibernate 3 Session Factory  -->

    <beans:bean id="enversListener" class="org.hibernate.envers.event.AuditEventListener" />

    <beans:bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="packagesToScan" value="com.***.model"/>
        <beans:property name="hibernateProperties">
            <beans:props>
                  <beans:prop key="dialect">org.hibernate.dialect.HSQLDialect</beans:prop>
                  <beans:prop key="hibernate.jdbc.batch_size">20</beans:prop>
                  <beans:prop key="show_sql">true</beans:prop>
                  <beans:prop key="hbm2ddl.auto">update</beans:prop>
            </beans:props>
        </beans:property>

        <beans:property name="eventListeners">
          <beans:map>
               <beans:entry key="post-insert"><beans:ref local="enversListener" /></beans:entry>
               <beans:entry key="post-update"><beans:ref local="enversListener" /></beans:entry>
               <beans:entry key="post-delete"><beans:ref local="enversListener" /></beans:entry>
               <beans:entry key="pre-collection-update"><beans:ref local="enversListener" /></beans:entry>
               <beans:entry key="pre-collection-remove"><beans:ref local="enversListener" /></beans:entry>
               <beans:entry key="post-collection-recreate"><beans:ref local="enversListener" /></beans:entry>
         </beans:map>
      </beans:property>

    </beans:bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="sessionFactory" />
    </beans:bean>

    <!-- Bean Defination -->
    <beans:bean id="userDao" class="com.***.DAO.UserDaoImpl"/>
    <beans:bean id="packDao" class="com.***.DAO.PackageDaoImpl"/>
    <beans:bean id="adminDao" class="com.***.DAO.AdminDaoImpl"/>
    <beans:bean id="branchDao" class="com.***.DAO.BranchDaoImpl"/>
    <beans:bean id="companyDao" class="com.***.DAO.CompanyDaoImpl"/>
    <beans:bean id="SubpackDao" class="com.***.DAO.SubpackageDaoImpl"/>

    <!-- Services Bean -->
    <beans:bean id="userService" class="com.***.services.UserServiceImpl"/>
    <beans:bean id="packageService" class="com.***.services.PackageServiceImpl"/>


</beans:beans>


org.hibernate.dialogue.hsql方言
20
真的
更新
1.接收请求并调用服务实现的控制器类

@Controller
    @RequestMapping(value="/PackageController")
    public class PackageController implements PackageService{

        private PackageService packService;

        @Autowired
        @Qualifier("packageService")
        public void setPackService(PackageService packService) {
            this.packService = packService;
        }

        @RequestMapping(value="/get_package_list",method=RequestMethod.POST,produces="application/json")
        public @ResponseBody String callgetPackageList(){
            System.out.println("Get the package list");
            List<Package> packageList = this.getPackageList();
            Iterator <Package> itTemp = packageList.iterator();
            JSONObject json=null;
            JSONArray json_data_array= new JSONArray();

            while(itTemp.hasNext())
            {
                Package packageTemp = itTemp.next();
                json = new JSONObject();
                try {
                    json.put("Id", packageTemp.getPackageId());
                    json.put("PackageName", packageTemp.getPackageName());
                    json_data_array.put(json);

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            json = new JSONObject();
            try {
                json.put("Id", "custom");
                json.put("PackageName", "Customise Package");
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            json_data_array.put(json);

            return json_data_array.toString();
        }
    @Override
        public List<Package> getPackageList() {
            // TODO Auto-generated method stub
            return packService.getPackageList();
        }
    }
@控制器
@请求映射(value=“/PackageController”)
公共类PackageController实现PackageService{
私有包服务包服务;
@自动连线
@限定符(“packageService”)
public void setPackService(PackageService packService){
this.packService=packService;
}
@RequestMapping(value=“/get\u package\u list”,method=RequestMethod.POST,products=“application/json”)
public@responseBy字符串callgetPackageList(){
System.out.println(“获取包列表”);
List packageList=this.getPackageList();
Iterator itetmp=packageList.Iterator();
JSONObject json=null;
JSONArray json_data_array=new JSONArray();
while(itTemp.hasNext())
{
Package packageTemp=itTemp.next();
json=新的JSONObject();
试一试{
put(“Id”,packageTemp.getPackageId());
put(“PackageName”,packageTemp.getPackageName());
json_data_array.put(json);
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
json=新的JSONObject();
试一试{
put(“Id”,“custom”);
put(“PackageName”、“定制包”);
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
json_data_array.put(json);
返回json_data_array.toString();
}
@凌驾
公共列表getPackageList(){
//TODO自动生成的方法存根
返回packService.getPackageList();
}
}
3.调用dao方法并应用事务注释的服务实现

public class PackageServiceImpl implements PackageService{

        private PackageDao packageDao;

        @Autowired
        @Qualifier("packDao")
        public void setPackageDao(PackageDao packageDao) {
            this.packageDao = packageDao;
        }

        @Override
        @Transactional
        public List<Package> getPackageList() {
            return packageDao.getPackageList();
        }
    }
public类PackageServiceImpl实现PackageService{
私有包dao包dao;
@自动连线
@限定词(“packDao”)
public void setPackageDao(PackageDao PackageDao){
this.packageDao=packageDao;
}
@凌驾
@交易的
公共列表getPackageList(){
返回packageDao.getPackageList();
}
}
4.编写实际查询以执行的Dao实现主要问题在于服务实现和包

public class PackageDaoImpl implements PackageDao{

            private SessionFactory sessionFactory;
            private SubpackageDao subpack;

            @Autowired
            @Qualifier("sessionFactory")
            public void setSessionFactory(SessionFactory sessionFactory) {
                this.sessionFactory = sessionFactory;
            }

            @Override
            public List<Package> getPackageList() {

                Session session=sessionFactory.openSession();
                List<Package> packageListTemp = null;
                Criteria criteria = session.createCriteria(Package.class);
                criteria.setFetchMode("subpackages", FetchMode.SELECT);
                packageListTemp = criteria.list();
                return packageListTemp;
            }
        }
public类PackageDaoImpl实现PackageDao{
私人会话工厂会话工厂;
私有子包dao子包;
@自动连线
@限定符(“会话工厂”)
public void setSessionFactory(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
@凌驾
公共列表getPackageList(){
Session Session=sessionFactory.openSession();
列表packageListTemp=null;
条件=session.createCriteria(Package.class);
条件.setFetchMode(“子包”,FetchMode.SELECT);
packageListTemp=criteria.list();
返回包装温度;
}
}

终于得到了答案,希望它能帮助那些遇到和我一样问题的人 问题的根本原因是

Session session=sessionFactory.openSession();
根据与使用openSession而不是getCurrentSession相关的帖子,会话是在spring容器的作用域之外打开的。结果会话未关闭,因此应用程序未响应查询调用