2016-07-23 4 views
0

私はBaseDAOまで伸びる複数のDAOクラスを持っており、すべてのDAOが同じセッションを使用するようにBaseDAOに新しいセッションを開きます。Hibernateセッションファクトリ複数のDAOのための新しいセッション

@Autowired 
public BaseDAOImpl(SessionFactory sessionFactory) { 
    super(sessionFactory); 
    this.mySession = sessionFactory.openSession(); 
    logger.info("My Session is Open."); 
} 

public Session getMySession(){ 
    return this.mySession; 
} 

@Repository("countryDAO") 
public class CountryDAOImpl extends BaseDAOImpl<Country> implements CountryDAO{ 

    @Autowired 
    public CountryDAOImpl(SessionFactory sessionFactory) { 
     super(sessionFactory); 
    } 
} 

@Repository("regionDAO") 
public class RegionDAOImpl extends BaseDAOImpl<Region> implements RegionDAO{ 

    @Autowired 
    public RegionDAOImpl(SessionFactory sessionFactory) { 
     super(sessionFactory); 
    } 
} 

私のサービスクラスでは、2 DAOを自動配線しています。

@Autowired 
CountryDAO countryDAO; 

@Autowired 
RegionDAO regionDAO; 

私のコンソールでは、「自分のセッション」が「開く」が2回印刷されています。それは2つの新しいセッションを開くことを意味しますか?何らかの理由で現在のセッションを使用したくないので、openSession()を使用します。私がcountryDAO.getMySession()。clear()を実行すると、regionDAOではなくcountryDAOセッションに読み込まれたエンティティのみがクリアされます。

答えて

0

はい、2つの異なるセッションを作成します。 あなたはすべてのあなたのDAOSのための1つのセッションを使用したい場合は、ログに

logger.info("My Session is Open:" + this.mySession.toString()); 

を追加することによって、それを検証 .getCurrentSession()代わり.openSession()を使用することができます。これを行うには、

<property name="hibernate.current_session_context_class">thread</property> 
+0

を使用して休止状態の設定を更新する必要があります。すべてのDAOに対して1セッションしか使用できないのですか? –

+0

私のプログラムはループしているので、各ループをコミットする必要がありますので、getCurrentSession()を使用したくありません。 –

+0

あなたの必要性についてはっきりしていません。あなたはあなたの質問にあなたのルーピングと "各ループをコミット"を追加する必要があります。 – Rocherlee

関連する問題