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: Could not commit Hibernate transaction; です。ネストされた例外は org.hibernate.TransactionException: Transaction not successfully started] であり、根本原因は org.hibernate.TransactionException: Transaction not successfully started です

誰かが私を助けてくれませんか。

このように書いていたら、

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 に答える