どういうわけか、セッションファクトリからデフォルトのスキーマ名を取得する方法があるかどうか疑問に思いましたか?これを取得する必要があるのは、1つのネイティブSQLを使用する必要があり、複数のスキーマと単一のデータソースに対して複数のセッションファクトリがあるためです。生成されたすべてのHibernateクエリは、他のスキーマへの選択アクセス権を持つ1人のユーザーによって実行されています。
質問する
21445 次
4 に答える
26
hibernateには、ネイティブSQLクエリで使用できる{h-schema}置換があることがわかりました。したがって、Oracleデータベース内の1つのスキーマに接続していて、別のスキーマに対してクエリを実行する場合、これは問題なく機能します。例は次のとおりです。
select * from {h-schema}table_name
この方法では、クエリで手動を実行する代わりに、replaceAll
各セッションファクトリがプロパティで構成されている場合、hibernateがすべてを処理し"hibernate.default_schema"
ます。
于 2011-01-31T13:10:27.193 に答える
7
Criteria apiのRestrictions.sqlRestriction(...)を使用するときに{h-schema}を使用するJohnのソリューションに問題がありました(おそらく、この置換は別のHQL api内で発生するためです)。Michaelのソリューションと同様に、私は以下を使用しました。
SessionFactoryImplementor sfi = (SessionFactoryImplementor)sessionFactory;
String name = sfi.getSettings().getDefaultSchemaName();
于 2011-12-14T06:28:58.293 に答える
1
これでうまくいきます:
SessionFactoryImplementor sfi = (SessionFactoryImplementor) getSessionFactory();
Settings settings = sfi.getSettings();
ConnectionProvider connectionProvider = settings.getConnectionProvider();
try {
Connection connection = connectionProvider.getConnection();
DatabaseMetaData databaseMetaData = connection.getMetaData();
String url = databaseMetaData.getURL();
//substring the string to what you want
System.out.println(url);
} catch (SQLException e) {
//throw something
}
于 2011-01-29T10:30:00.127 に答える
0
@Ryan Morlok、評判が悪いのであなたの答えにコメントすることはできません。あなたの答えは正しいですが、現在は非推奨です。hibernateバージョン5.0.1では、スキーマ名は次を使用して取得できます
(SessionFactoryImpl)sessionFactory).getProperties().getProperty("hibernate.default_schema")
于 2019-02-22T21:32:36.613 に答える