2017-12-22 18 views
0

私はSpring 4.3とHibernate 3.6を使用しています。私はカスタムのHibernate dialectリゾルバを指定しようとしましたが、使用されていません。Hibernate 3.6動的ダイアレクトリゾルバ

私はカスタムのダイアレクトリゾルバにログステートメントを入れましたが、決して印刷されません。

私の具体的な質問は以下のとおりです。

  1. は、どのように私は私のカスタム方言リゾルバをピックアップして3.6を休止得るのですか?

  2. 特定のhibernateプロパティ(hibernate.dialect_resolvers)が無視されるのはなぜですか?それを設定する正しい方法は何ですか?

ここに私が試したことのリストがありますが、私は現在考えていません。

  1. は、私はHibernate3ののLocalSessionFactoryBeanを拡張するカスタムのSessionFactory豆を使用してみました、とEnvironment.DIALECT_RESOLVERSを設定するpostProcessConfigurationメソッドをオーバーライドセッション工場の休止性質上

    <property name="hibernateProperties"> 
         <value> 
         hibernate.dialect_resolvers=mypackage.MyDialectResolver 
         ... 
         </value> 
    </property>
  2. を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"

  3. Iは、Hibernateのソースコードをチェックし、それらがEnvironment initialization中に読み取られるように見えるため、ならびにシステム(ENV)プロパティを設定しようとしました。また、環境プロパティは、DialectFactoryのDIALECT_RESOLVERS設定を取得するために使用されます。しかし、それはどちらもうまくいきませんでした。 hibernate.dialect_resolvers=mypackage.MyDialectResolver;

FINAL EDIT: 私はhibernate.propertiesを追加し、それにプロパティを設定します。それはうまくいった! hibernate.propertiesファイルはクラスパスのルートにある必要があり、どこか深くネストできません。これは方法のためですHibernate Environment loads the file

答えて

0

私はhibernate.propertiesを追加し、プロパティを設定しました。それはうまくいった!

hibernate.propertiesファイルはクラスパスのルートにある必要があり、どこか深くネストできません。これは方法のためですHibernate Environment loads the file

関連する問題