Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC-HibernateMySQL_Java_Mysql_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java SpringMVC-HibernateMySQL

Java SpringMVC-HibernateMySQL,java,mysql,spring,hibernate,spring-mvc,Java,Mysql,Spring,Hibernate,Spring Mvc,我正在用SpringMVC、Hibernate和数据库MySQL开发一个应用程序 控制器处理请求和响应。Hibernate处理数据库事务 我的问题是,当一个或两个访问该服务时,它可以正常工作,但在一段时间内可以正常工作,但在这之后,我经常会收到错误并锁定超时 //My sample Controller code @RequestMapping(value = "Bank", method = RequestMethod.GET) public ResponseEntity<L

我正在用SpringMVC、Hibernate和数据库MySQL开发一个应用程序 控制器处理请求和响应。Hibernate处理数据库事务

我的问题是,当一个或两个访问该服务时,它可以正常工作,但在一段时间内可以正常工作,但在这之后,我经常会收到错误并锁定超时

//My sample Controller code

 @RequestMapping(value = "Bank", method = RequestMethod.GET)
    public ResponseEntity<List<Bank>> getAllBank(@RequestHeader int data) {
        try {
            //My DAO implementation class for bank table
            bankdao = new BankDAOImpl();
            List<Bank> bank = bankdao.getAllBank(data);

            return new ResponseEntity<List<Bank>>(bank, HttpStatus.OK);
        } catch (HibernateException he) {
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

//My DAO implementation code

public List<Bank> getAllBank(int organizationId) throws HibernateException {
//I'm opening session in every function
Session session = SessionFactoryUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            Criteria criteria = session.createCriteria(Bank.class);
            criteria.add(Restrictions.eq("organizationId", organizationId));
            criteria.add(Restrictions.eq("deleteFlag", false));
            criteria.addOrder(Order.asc("bankName"));
            List<Bank> ls=criteria.list();
            return ls;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            session.getTransaction().commit();
            session.close();
        }
//我的示例控制器代码
@RequestMapping(value=“Bank”,method=RequestMethod.GET)
公共响应属性getAllBank(@RequestHeader int data){
试一试{
//银行表的我的DAO实现类
bankdao=新的BankDAOImpl();
List bank=bankdao.getAllBank(数据);
返回新的响应状态(bank,HttpStatus.OK);
}捕获(冬眠异常he){
返回新的响应属性(HttpStatus.INTERNAL_SERVER_ERROR);
}捕获(例外e){
e、 printStackTrace();
返回新的响应属性(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
//我的DAO实现代码
公共列表getAllBank(int organizationId)引发HibernateeException{
//我在每一个活动中都会主持开幕式
Session Session=SessionFactoryUtil.getSessionFactory().openSession();
试一试{
session.beginTransaction();
条件=session.createCriteria(Bank.class);
添加(Restrictions.eq(“organizationId”,organizationId));
添加(Restrictions.eq(“deleteFlag”,false));
标准.addOrder(Order.asc(“银行名称”));
List ls=标准。List();
返回ls;
}捕获(例外e){
e、 printStackTrace();
返回null;
}最后{
session.getTransaction().commit();
session.close();
}
导致问题的会话 如果我为所有函数创建单独的会话工厂,而不是打开会话


它能解决我的问题吗?

您不应该为每个方法创建单独的会话工厂。只需打开一个会话。可能是您处理事务的方式不正确。您应该这样做

public List<Bank> getAllBank(int organizationId) throws HibernateException {
    //I'm opening session in every function
    Session session = SessionFactoryUtil.getSessionFactory().openSession();
    Transaction tx = null;
            try {
                tx = session.beginTransaction();
                Criteria criteria = session.createCriteria(Bank.class);
                criteria.add(Restrictions.eq("organizationId", organizationId));
                criteria.add(Restrictions.eq("deleteFlag", false));
                criteria.addOrder(Order.asc("bankName"));
                List<Bank> ls=criteria.list();
                tx.commit();// commit here
                return ls;
            } catch (Exception e) {
                e.printStackTrace();
                if (tx != null) {
                  tx.rollback();// rollback here
                } 
                return null;
            } finally {
                session.close();
            }
    } 
public List getAllBank(int-organizationId)抛出HibernateeException{
//我在每一个活动中都会主持开幕式
Session Session=SessionFactoryUtil.getSessionFactory().openSession();
事务tx=null;
试一试{
tx=session.beginTransaction();
条件=session.createCriteria(Bank.class);
添加(Restrictions.eq(“organizationId”,organizationId));
添加(Restrictions.eq(“deleteFlag”,false));
标准.addOrder(Order.asc(“银行名称”));
List ls=标准。List();
tx.commit();//在此处提交
返回ls;
}捕获(例外e){
e、 printStackTrace();
如果(tx!=null){
tx.rollback();//在此处回滚
} 
返回null;
}最后{
session.close();
}
} 

可能是您的
SessionFactoryUtil
有问题。查看它会很有趣。

尝试使用@Autowired BankDAOImpl BankDAOImpl,而不是创建新实例您是否可以粘贴锁超时异常的实际堆栈跟踪?此外,您是否在未发布的代码中的其他地方或通过任何其他方法执行更新ns(例如,在mysql数据库客户端中)?您是否有对dao方法的嵌套调用?当一个dao方法调用另一个dao方法时?如何配置hibernate数据源?@Ben Rowland同时会有许多用户插入、更新、,delete@user1516873是的,在某些函数中,SessionFactoryUtil是一个类,其中我将sessionFactory配置绑定到该cfg文件并构建session@Sreema我明白了。我希望您只构建一次会话工厂。是的,但在所有函数中都会打开会话。我发现了一种可能性,可以使用hibernatecp3 jar来增加连接池,这有助于提高性能@v.ladynev