碰到一件奇怪的事情 。 最近在整一个系统(SSH),都是关于表单分步提交的,头晕,发现前面几步表单提交都是正常的,到最后一步碰到一件头痛的事情 ,表单(取个名字表单A)怎么提交都无法更新数据 后来断点调试程序发现, 執行这句话(Transaction tr=session.beginTransaction())的时候停止了,不能往下走,也没有报错。
另外表单A刷新再提交,连提交都提交不了(action都不能调用),其它操作都不行了 一直在加载。重新部署才可以。 
---- 不知道为什么? 后来写了个测试类 直接引用spring配置文件运行却可以执行以下方法。 就是运行在tomcat上出现这等怪事。(配置文件是没问题的)。
是不是 session 出现问题了。但是调试的发现session 不是空的。 请教下有没有碰到这类似的情况 是怎么搞定的? 谢谢了。看似简单的问题。 我弄了一天 真的头痛啊 浪费一天的时间 真气人。
代码如下:
String hql = "update VAppBaseT as t set t.checkingFlag=? where t.appId=? "; 
Session session = super.getSession(true); 
Transaction tr=session.beginTransaction(); 
try { 
Query q = session.createQuery(hql); q.setString(0, checkflag); 
q.setString(1, appId);       q.executeUpdate(); 
      tr.commit(); } catch (HibernateException  e) { 
e.printStackTrace(); 
}

解决方案 »

  1.   

    呵呵,很有可能存在未提交的事务,所以不能对被锁表进行操作。
    查看被锁的表 (oracle)
    select   p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name   from   v$process   p,v$session   a,   v$locked_object   b,all_objects   c   where   p.addr=a.paddr   and   a.process=b.process   and   c.object_id=b.object_id   
    查看连接的进程 (oracle)
    SELECT sid, serial#, username, osuser FROM v$session; 
    看看当前表是被那个进程锁的,再从程序中找原因。
      

  2.   

    lz要注意咯,SSH开发的时候在你的TOMCAT里面的WEBAPPS中的你的项目的asm-2.2.3是否存在,看看把它删了是否可以
      

  3.   

    lz注意咯,在SSH开发中,在发布你的项目的同时,看在你TOMCAT目录下的WEBAPPS中的asm-2.2.3是否存在,把它删除了,看是否可以,也许可行哦
      

  4.   

    我想应该是死锁了 可能是之前的操作引起的 后来修改下代码可以了  还是把hibernate 好好研究下  不然乱用出现这些问题就有点尴尬了。一个好的ORM框架不好好掌握  感觉不到一点优越性  倒不如直接JDBC操作省事。这就是我的反省。 谢谢大家。