2016-10-18 1 views
0

私はSpring MVCとHibernateで動作するアプリケーションを持っています。単一のユーザーがレコードを挿入しても、同時に複数のユーザーがレコードを同時に挿入した場合は正常に動作します。このエラーは「Hibernate:org.hibernate.AssertionFailure:null id in」を示しています。これは、同じ時刻のためにすべてのレコードに対してhibernateによる自動プライマリIDの生成が似ている可能性があるためです。これについてはわからない。助けてください。重大な修正が必要です。Hibernate:10人以上のユーザーがレコードを同時に挿入したときの例外

私はあなたが並行性の問題は、このクラスを作成して検討した場合は

@Transactional 
public Account addAccount(Account acct) { 

     session = sessionFactory.getCurrentSession(); 
     session.save(acct); 
     session.flush(); 
     session.clear(); 
     return acct; 

} 
+0

可能性のある重複したような古いJavaのバージョンのために働く必要があります:ヌルエントリのid(ないフラッシュ例外が発生した後のセッション)](0120-1875542/org-hibernate-assertionfailure-null-id-inentent-dont-flush-the-session-after) – Dez

+0

その質問は完全です違う、私はそれを読んだ。私の質問を提起する前に –

+0

投稿されたエンティティを投稿してください。 IDはどのように生成されていますか? –

答えて

0

に従うとして使用コード:コード内の最後に

public AccountConcurrencyUtils { 

    public static synchronized Account addAccount(Account acct, SessionType session) { 
     session = sessionFactory.getCurrentSession(); 
     session.save(acct); 
     session.flush(); 
     session.clear(); 
     return acct; 
    } 

} 

@Transactional 
public Account addAccount(Account acct) { 
    return AccountConcurrencyUtils.addAccount(acct, session); 
} 

これはprovent必要があります並行性の問題、Java 7を使用している場合は対処法が必要ですが、これは は、並行性については問題を修正し、そうでなければ問題がその他のものである可能性があります。

私は、コードを更新し、使用しているセッションのタイプを入れ、これも[org.hibernate.AssertionFailureのJava 5の

+0

これはJava 8でもうまくいくでしょう –

+0

天才です。ありがとうございます。これはjava 8で動作します –

+0

はいそれは動作します –

関連する問題