2017-04-21 16 views
1

私はspring mvc 3.2とhibernate 3.6.3を使用してWebアプリケーションのビルドに取り組んでいます。 私はDAOクラスでHibernateDaoSupportクラスをextedしています。今度は、session.update()を使ってエンティティを更新したいのですが、hibernateDaoSupportメソッドからセッションを取得していますgetSession()。私はこれでも取引を利用しています。 しかし、トランザクションをコミットした後、更新はデータベースに反映されません。しかし、私がコミットする前にsession.flush()を使用している場合は、それが反映されます。 transaction.commitがコミット前にフラッシュすることを知っているので、なぜレコードを更新していないのですか?私はアプリケーション・コンテキストでトランザクション・マネージャを使用しておらず、トランザクションはhibernateaosupportによってどのように管理されていますか。 getSessionメソッドが現在のトランザクションからセッションをチェックするため、新しいセッションがアプリケーションで開かれた場合、それが見つかった場合はそれ以外のものを返します。これは、各http要求で新しい休止状態のセッションが開かれるかどうかを意味します。session.update()またはsession.save()のデータがデータベースに反映されていませんか?

マイダオコードがある -

public Map<String, Object> addImmunizationCard(Box box, 
      Map<String, Object> dataMap) { 
     Session session = (Session) getSession(); 
     Map<String, Object> map = new HashMap<String, Object>(); 
     Transaction tx = null; 
try { 
      tx = session.beginTransaction(); 

MasBed bed = (MasBed)session.get(MasBed.class, new Integer(1101)); 

      System.out.println(bed.getBedNo()); 
      bed.setBedNo("Amit Das"); 
      session.update(bed); 
      tx.commit(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      tx.rollback(); 
     } 
     return map; 
} 

答えて

0

デフォルトフラッシュモードは、クエリの実行前に、その時々フラッシュを意味AUTOです。フラッシュモードがCOMMITに設定されると、トランザクションコミットの前にフラッシュが行われます。

私はsession.saveを呼び出した後session.createCriteriaを実行した場合、それは自動的にコミットされますことを意味しhttps://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/FlushMode.html

+0

を参照してください? –

+0

私はそうは考えていません.. createcriteriaはクエリを実行せず、自動コミットが設定されていない限り明示的にコミットする必要があります – OTM

関連する問題