zhangyq的gravatar头像
zhangyq 2016-01-08 11:19:27

hibernate映射的实体类set方法中调用存储过程,tomcat线程骤增,什么原因?

因项目需要在ssh中使用存储过程根据主键id查询一些信息,我为了自动调用,就将调用存储过程的代码写在了Hibernate 映射的实体类的set方法中,代码如下:

public void setCaseId(long caseId) {

        this.caseId = caseId;

        CurrTestExeCaseService service = SpringFactory.getBean("currTestExeCaseService"); //从spring容器中取出service

        service.updateDetail(this); //调用存储过程,并将查询到的信息更新到this(即此实体类中)

        System.out.println(this.deviceName);

    }



//调用存储过程部分的代码

public void updateDetail(final CurrTestExeCase tCase) {

        Session session = getCurrentSession();



         final Long tCaseID = tCase.getCaseId();

        session.doWork(new Work(){



            @Override

            public void execute(Connection conn) throws SQLException {

                 java.sql.CallableStatement statement = conn.prepareCall("{Call getTotalCaseDetail(?)}");

                statement.setLong("pCaseId", tCaseID);

                ResultSet rs = (ResultSet) statement.executeQuery();

                rs.next();

                tCase.setMsgStr(rs.getString("result"));

                System.out.println(rs.getString("result"));

            }



        });

        String[] results = tCase.getMsgStr().split("/",4);

        if(results.length == 4) {

            tCase.setRouterName(results[0]);

            tCase.setDeviceName(results[1]);

            tCase.setOpertypeStr(results[2]);

            tCase.setTestDescript(results[3]);

        }

    }

然而,网站运行后,在调用到此部分代码的页面不挺按f5刷新的话,在Java VisualVM中监视tomcat的线程会骤增,后从代码取消,在service中使用循环调用,则不存在此现象

hibernate映射的实体类set方法中调用存储过程,tomcat线程骤增,什么原因?

所有回答列表(1)
wentao的gravatar头像
wentao  LV24 2016年1月10日

可能是worker 并发问题

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友