今天在帮朋友调试一个关于多线程访问同一张表引起的Lock wait timeout exceede的问题,感觉引起的原因有:
1,没有进行优化,尽量避免多线程
2,根据它后面报的异常,提醒我可以Hibernate 的Session没有使用得当,(也是我解决的方案)
3,用synchronized修饰更新表的函数
估计是原来程序在修改完该表时立刻进行了插入操作导致的,
所以我在更新后进行getHibernateTemplate().flush();
最后,在插入操作(save())时,原本他是又创建了一个新的DAO,再将记录插入到数据库中,而因为是同一个DAO,我将其删掉,直接调用save(),这个问题也就解决了!
调试之前:
调试之后:
最后还有一个关于MYSQL的问题,就是编码,发现使用Hibernate自带的hbm2ddl工具会更改到DB的编码(每次都把他改成latin1!!!),最后没办法使用它生成的SQL语句写入一个脚本,再在MYSQL自行导入,问题解决!faint~