私はSpring 4.3とHibernate 3.6を使用しています。私はカスタムのHibernate dialectリゾルバを指定しようとしましたが、使用されていません。Hibernate 3.6動的ダイアレクトリゾルバ
私はカスタムのダイアレクトリゾルバにログステートメントを入れましたが、決して印刷されません。
私の具体的な質問は以下のとおりです。
は、どのように私は私のカスタム方言リゾルバをピックアップして3.6を休止得るのですか?
特定のhibernateプロパティ(hibernate.dialect_resolvers)が無視されるのはなぜですか?それを設定する正しい方法は何ですか?
ここに私が試したことのリストがありますが、私は現在考えていません。
は、私はHibernate3ののLocalSessionFactoryBeanを拡張するカスタムのSessionFactory豆を使用してみました、とEnvironment.DIALECT_RESOLVERSを設定するpostProcessConfigurationメソッドをオーバーライドセッション工場の休止性質上
<property name="hibernateProperties"> <value> hibernate.dialect_resolvers=mypackage.MyDialectResolver ... </value> </property>
をdialect_resolversプロパティを設定してみましたプロパティ。
config.setProperty(Environment.DIALECT_RESOLVER, MyDialectResolver.class.getName());
私がセッションファクトリで設定しているその他のプロパティは、期待通りに動作しますが、印刷しようとしているときにはnullとして表示されます。たとえば、私は期待どおりに動作する接続プロバイダを設定していますが、
Environment.getProperties().getProperty(CONNECTION_PROVIDER)
でアクセスするとnullになります。config.setProperty(Environment.CONNECTION_PROVIDER, CustomConnectionProvider.class.getName());
しかし、後でダイアレクトリゾルバプロパティ(アプリケーションコード内)を印刷しようとすると、設定されていないように見えます。
log.info("Dialect resolver property: " + Environment.getProperties().getProperty(Environment.DIALECT_RESOLVERS));
ログ出力:
"Dialect resolver property: null"
Iは、Hibernateのソースコードをチェックし、それらがEnvironment initialization中に読み取られるように見えるため、ならびにシステム(ENV)プロパティを設定しようとしました。また、環境プロパティは、DialectFactoryのDIALECT_RESOLVERS設定を取得するために使用されます。しかし、それはどちらもうまくいきませんでした。
hibernate.dialect_resolvers=mypackage.MyDialectResolver;
FINAL EDIT: 私はhibernate.propertiesを追加し、それにプロパティを設定します。それはうまくいった! hibernate.propertiesファイルはクラスパスのルートにある必要があり、どこか深くネストできません。これは方法のためですHibernate Environment loads the file