2

postgres dbでcrud操作を実行する春のAPIがあります。数回挿入した後、新しいjdbc接続を開こうとして、永久にハングします。

[DEBUG,StatefulPersistenceContext,main] initializing non-lazy collections
[TRACE,JDBCContext,main] after autocommit
[DEBUG,ConnectionManager,main] transaction completed on session with on_close connection      release mode; be sure to close the session to release JDBC resources!
[TRACE,SessionImpl,main] after transaction completion
[INFO,Initializer,main] Creating publisher user for lisa penny
[DEBUG,DefaultListableBeanFactory,main] Returning cached instance of singleton bean 'transactionManager'
[DEBUG,HibernateTransactionManager,main] Creating new transaction with name     [org.temp.demo.core.dao.hb.GenericHibernateDAO.makePersistent]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
[DEBUG,SessionImpl,main] opened session at timestamp: 13657283326
[DEBUG,HibernateTransactionManager,main] Opened new Session     
[org.hibernate.impl.SessionImpl@3a1ca1a4] for Hibernate transaction
[DEBUG,HibernateTransactionManager,main] Preparing JDBC Connection of Hibernate Session   [org.hibernate.impl.SessionImpl@3a1ca1a4]
[DEBUG,JDBCTransaction,main] begin
[DEBUG,ConnectionManager,main] opening JDBC connection

毎回ここで停止します。誰か何か提案してもらえますか? 私は見当もつかない

4

2 に答える 2

0

トランザクションとセッションの例を閉じます。自動配線されたクラスを見つけて、私の例のように変更してください。

public ContentResult insertNewContent( Content content )
    {
        ContentResult result = this.validateContent( content );

        if( result.hasErrors() == false )
        {
            Session session = this._hibernateSessionFactory.openSession();
            Transaction tx = null;

            try
            {
                //important !
                tx = session.beginTransaction();

                session.save( content );

                tx.commit();

                if( content.get_id() > 0 )
                {

                }
                else
                {
                    result.addError( ContentResult.CODES.ERROR_INVALID_ID );
                }

            }
            catch( HibernateException e )
            {
                //important !
                if( tx != null )
                {
                    tx.rollback();
                }
                ContentRepository.logger.error( "insertNewContent failed" );        
                e.printStackTrace();
            }
            finally
            {
                //important !
                session.close();
            }
        }

        return result;

    }
于 2014-08-15T06:23:51.833 に答える
0

操作を行った後、トランザクションとセッションを閉じる必要があります。現在のセッションではなく、トランザクションが開いていて、新しい操作のために新しいトランザクションを開いた場合。これにより、データベースがハングします。

于 2014-08-15T04:43:31.410 に答える