2

我在春天写了 dao,就像我以前在 struts 中写的一样,有些人是这样想的

@Autowired
    private SessionFactory sessionFactory;
    Session session=null;
    Transaction tx=null;
   List<Login> users= null;
    try{
        session=sessionFactory.getCurrentSession();
        tx=session.beginTransaction();
        users=session.createQuery("from Login").list();
        tx.commit();
    }catch(Exception e){System.out.println("commit exception:"+e);
        try {tx.rollback();} catch (Exception ex) {System.out.println("rollback exception:"+ex);} 
    }finally{if(session!=null && session.isOpen()){session.close();}}

但我收到此错误:

抛出异常[请求处理失败;嵌套异常是 org.springframework.transaction.TransactionSystemException:无法提交 Hibernate 事务;嵌套异常是 org.hibernate.TransactionException:事务未成功启动] 根本原因 org.hibernate.TransactionException:事务未成功启动

有人可以帮帮我吗?

如果我这样写,

try{
            users=sessionFactory.getCurrentSession().createQuery("from Login").list();
        }catch(Exception e){System.out.println("commit exception:"+e);

它工作正常,但它安全吗?

谢谢并恭祝安康

4

1 回答 1

3

您正在使用@Transactional,让 Spring 为您启动、提交和回滚事务,并以声明方式处理您的事务。这样做的全部意义在于不必在代码中启动、提交和回滚事务。所以方法实现应该简单地是

return (List<Login>) sessionFactory.getCurrentSession().createQuery("from Login").list();
于 2013-05-11T07:03:09.417 回答