Java Mysql函数不返回对Hibernate的响应

Java Mysql函数不返回对Hibernate的响应,java,mysql,sql,hibernate,Java,Mysql,Sql,Hibernate,我有一个mysql函数,它是使用Spring的HibernateCallback类从web应用程序的服务类调用的。此函数使用光标选择一些行,然后执行一些更新和插入操作。然后返回一个varchar 当光标选择的行数为几百行时,一切正常。但当行数为12000时,调用的java代码没有收到任何响应,即使是在1小时内 当我们查看mysql慢速查询日志和错误日志时,显示mysql函数运行时间为8秒,锁定时间为0.7秒。但java程序并没有得到任何响应。而且,无论何时调用此函数,mysql进程列表都会非常高

我有一个mysql函数,它是使用Spring的HibernateCallback类从web应用程序的服务类调用的。此函数使用光标选择一些行,然后执行一些更新和插入操作。然后返回一个varchar

当光标选择的行数为几百行时,一切正常。但当行数为12000时,调用的java代码没有收到任何响应,即使是在1小时内

当我们查看mysql慢速查询日志和错误日志时,显示mysql函数运行时间为8秒,锁定时间为0.7秒。但java程序并没有得到任何响应。而且,无论何时调用此函数,mysql进程列表都会非常高

当根据mysql日志,函数已经运行时,没有响应的可能原因是什么

功能如下:

CREATE FUNCTION fun_test(
    param1 varchar(15),
    param2 varchar(20),
    v_startTime timestamp,
    v_endTime timestamp)
RETURNS varchar(50) DETERMINISTIC
begin
    declare v_no_more_rows BOOLEAN;
    declare v_id int ;
    declare v_count int default 0;
    declare v_amount double ;
    declare v_totalAmount double default 0;

    DECLARE cur1 CURSOR FOR
        SELECT id,amount 
            from table1 
            where col1=param1 
                and updatedat>= v_startTime 
                and updatedat< v_endTime 
                and amount>0;

    DECLARE CONTINUE HANDLER FOR NOT FOUND
            SET v_no_more_rows = TRUE;

    OPEN cur1;
    loop_cur1: LOOP

        FETCH cur1
        INTO v_id,v_amount;
        IF v_no_more_rows THEN
            CLOSE cur1;
            LEAVE loop_cur1;
        END IF;      

        insert into table2 (parentid,createdAt) values(v_id,current_timestamp());
        update table1 
            set updatedat = current_timestamp()
            where
            id = v_id;
            set v_totalAmount=v_totalAmount+v_amount;
            set v_count=v_count+1;

    END LOOP loop_cur1;

    return concat("SUCCESS:",v_totalAmount,":",v_count);

end ;

你能发布显示函数完成的日志条目吗?mysql进程CPU使用率是否非常高,持续时间是否为7秒或更长?在查看Hibernate/您的Java代码之前,最好“证明”您的理论,即函数正在完成,因为您看到的一个明显的解释是函数实际上没有完成。请检查您的Hibernate会话。如果表在hibernate会话中被锁定,而您正试图通过游标插入到同一个表中,则可能会出现此问题。@KanagarajM如果在游标插入中出现问题,mysql函数是如何在7秒内完成的?我知道这应该是下一个问题,但我已经遇到了此类问题。只有在这种情况下,Hibernate才会等待太长时间。尝试调试并发布您的hibernate日志。@KanagarajM:由于函数对调用java代码没有响应,我将在java或hibernate中调试什么?
 Time: 140116 11:22:39
  User@Host: host @  [x.x.x.x]
  Query_time: 7.868044  Lock_time: 0.852301 Rows_sent: 1  Rows_examined: 0
  SET timestamp=1389851559;
  select fun_test('a','b','2014-01-01 11:00:00','2014-01-01 12:00:00');