4

顧客ごとに複数のデータベースが必要です。Hibernate で複数のデータベースを処理するにはどうすればよいですか? これを行う方法の良い例はありますか?

Configuration オブジェクトを作成してから SessionFactory をビルドすることもできますが、それでは常に新しいセッション ファクトリが作成されるため、あまり賢明ではありません。

編集:

これで、ユーザーがログインしたときに休止状態の構成オブジェクトを取得できますが、そのオブジェクトを使用してセッション ファクトリを作成/取得して、1 つのデータベースに対して 1 つのセッション ファクトリしか存在しないようにするにはどうすればよいですか (もちろん、複数のデータベースが同時に使用される場合は、複数のセッション ファクトリが存在する可能性があります)。

4

3 に答える 3

4

私も同じ問題を抱えていました。私はこのようにそれを解決しました:

まず、データベースごとに異なる cfg.xml ファイルが必要です。次に、2 番目のデータベースに接続するときはいつでも、Hibernate の Configuration オブジェクトを使用するだけです。

Configuration config = new Configuration().configure("<complete path to your cfg.xml file>");
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();

ここでこれを見つけました:http://www.coderanch.com/t/468821/ORM/java/If-hibernate-cfg-xml-has

これは 2 つ以上のデータベースに拡張できると確信しています。お役に立てれば。

于 2011-05-12T18:20:12.753 に答える
2

顧客ごとに複数のデータベースが必要です。Hibernate で複数のデータベースを処理するにはどうすればよいですか? これを行う方法の良い例はありますか?

実際、複数SessionFactory(データベースごとに 1 つ) を作成する必要があります。

これで、ユーザーがログインしたときに休止状態の構成オブジェクトを取得できますが、そのオブジェクトを使用してセッション ファクトリを作成/取得して、1 つのデータベースに対して 1 つのセッション ファクトリしか存在しないようにするにはどうすればよいですか (もちろん、複数のデータベースが同時に使用される場合は、複数のセッション ファクトリが存在する可能性があります)。

いくつかのユニークなものを使用してくださいMap<SomeKey, SessionFactory>SessionFactoryがまだ作成されていない場合は、作成してマップに保存します。

于 2010-10-25T13:01:28.357 に答える
2

Hibernateは一度にSessionFactory1 つしか処理できずDataSource、一般的に言えば、それぞれDataSourceが 1 つのデータベースのみを参照します。したがって、複数のデータベースが必要な場合、最も簡単な解決策はほぼ確実に複数のSessionFactoryインスタンスです。

これが賢明ではないとあなたが考える理由はわかりませんが、私には十分に公平に思えます。

一部の RDBMS では、制限付きのクロスデータベース参照が許可されているため、Hibernate と単一DataSourceの .

于 2010-10-25T07:38:15.557 に答える