事务控制在业务层,业务层某一方法出现线程死锁导致方法没有执行完,这时候DAO操作已经执行了,数据库已经上锁了,那么其它数据库操作处于一直等待状态。有没有什么好方法解决?

解决方案 »

  1.   

    一般使用FLAG_COUNT 标签值方式。这样就很少出现数据库更新死锁。线程死锁?估计有临界值操作。代码发出来才能断定!
      

  2.   

    Hibernate 都是以对象进行操作的,不管是增加,更新,删除都是对对象进行操作的增加记录:public List selectManager() { 
    session = sessionFactory.openSession(); //从sessionFactory中得到session session.save(你要增加的对象); //执行增加 session.close(); //关闭session 

    更新记录:public List selectManager() { 
    session = sessionFactory.openSession(); //从sessionFactory中得到session session.update(你要更新的对象); //执行更新
    session.close(); //关闭session 
    } 删除记录:public List selectManager() { 
    session = sessionFactory.openSession(); //从sessionFactory中得到session session.delete(你要删除的对象); //执行删除
    session.close(); //关闭session 
     public class TbHibernateDao { 
    private static SessionFactory sessionFactory=null; //声明一个静态的 SessionFactory 初始值为null 
    private Session session=null; //声明一个Session 初始值为null 
    Transaction tx = null; //声明一个Transaction 初始值为null 
    static { 
    try { 
    Configuration config = new Configuration().configure(); //初始化 
    sessionFactory = config.buildSessionFactory(); //得到sessionFactory } catch (Exception e) { 
    System.out.println(e.getMessage()); //如果出现异常的话打印异常信息 


    public List selectManager() { 
    session = sessionFactory.openSession(); //从sessionFactory中得到session tx = session.beginTransaction(); //开始事物提交 
    String hql = "from TbUser"; //HQL语句 
    List list = null; //声明一个List,用来存放结果,初始值为null 
    try { 
    Query query = session.createQuery(hql); //执行HQL语句 
    list = query.list(); //得到返回的结果,放到list里 
    } catch (Exception e) { 
    System.out.println(e.getMessage()); //如果出现异常,打印异常信息 

    tx.commit(); //事物提交 
    session.close(); //关闭session 
    return list; //返回想要的结果 
      

  3.   

    使用乐观锁机制吧..........
    这个是hibernate推荐的.........
    乐观锁不需要开发者手动打开或者手动关闭.........
    它由hibernate自动执行.........
    只要开发者在配置文档丽配置下.............
    我只了解,没用过............
    如果你有财务方面的项目源码你可以看下,锁机制一般和财务挂钩..