我在春天写过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:事务未成功 以root原因org.hibernate.TransactionException: 交易未成功启动
有人可以帮帮我。
如果我这样写,
try{
users=sessionFactory.getCurrentSession().createQuery("from Login").list();
}catch(Exception e){System.out.println("commit exception:"+e);
工作正常,但是安全吗?
谢谢和问候
答案 0 :(得分:3)
您正在使用@Transactional,为您启动Spring启动,提交和回滚事务,并以声明方式处理您的事务。这一点的关键在于不必在代码中启动,提交和回滚事务。所以方法实现应该只是
return (List<Login>) sessionFactory.getCurrentSession().createQuery("from Login").list();