2009-05-13 13 views
1

問題があります。休止状態 - 問題のヘルプ

私のアプリケーションでは、1)いくつかのデータを取得するための既存の休止状態の接続を使用します。 これで、データを取得する同じDB内のいくつかのテーブルを更新する必要があります。これは、別の接続を介して行わなければなりません。

この目的のためにhibernate.cfg.xmlファイルを別に作成することはできますか?

もしそうなら、どのように接続を区別するのでしょうか。

または、私は2番目のケースで休止状態を使用できませんか?

親切にお手伝いください。

+0

私が尋ねることがあるのは、読んで更新するために別々の接続が必要な理由は何ですか? – rudolfson

+0

私はまた、なぜ尋ねるでしょう。このような珍しいパターンを使用しようとしているという事実は、フラグを立てるべきです。 ロックのような別の問題を回避しようとしていますか? これは、根本的な問題に取り組む最も効果的な方法ではないかもしれません。 –

答えて

0

このシナリオをテストすることなく、Hibernateで可能になるはずです。同じマッピングを使用しているが、接続には異なる設定(-> hibernate.cfg.xml)を使用して2つのSessionFactoryを設定する必要があります。アプリケーションの使用状況ではあり

// read entry using first session factory 
Session sessionForRead = readSessionFactory.getCurrentSession(); // or openSession() 
sessionForRead.beginTransaction(); 
MyEntry entry = (MyEntry) sessionForRead.load(MyEntry.class, someId) // or whatever to load entries 
sessionForRead.getTransaction().commit(); 

// update entry using the other session factory 
Session sessionForUpdate = updateSessionFactpry.getCurrentSession(); // or openSession() 
sessionForUpdate.beginTransaction(); 
sessionForUpdate.update(entry); 
sessionForUpdate.getTransaction().commit(); 

のようになります。また、(JavaDoc for SessionFactoryを参照してください)与えられたJDBC接続を使用してセッションを開くための方法が存在するが、私はそれを使ったことがありません。おそらくあなたはそれを試すことができます。しかし、最初の解決策は私にはきれいに見えます。

0

これを行うには2通りの方法があります。あなたは明示的に構成にXML設定ファイルを渡すことができます。

AnnotationConfiguration cfg1 = new AnnotationConfiguration(); 
cfg.configure("/hibernate1.cfg.xml"); 

AnnotationConfiguration cfg2 = new AnnotationConfiguration(); 
cfg.configure("/hibernate2.cfg.xml"); 

それとも、手動でのSessionFactoryを取得する前に、データベースのプロパティを更新することができます。

Configuration cfg1 = new Configuration(); 
cfg1.addClass(...) 
Properties p = new Properties(); 
p.put(Environment.DATASOURCE, "jdbc/database1"); // if using JNDI 
p.put(Environment.URL, DRIVER, etc..) // if using a direction connection 
cfg1.addProperties(p); 
cfg1.buildSessionFactory(); 

...異なる性質を利用して他の構成について リピート

ただし、これを行うと、正しいセッションファクトリからセッションを取得できます。