Hibernate または Spring Framework と Hibernate の組み合わせ (Spring 2.5 と Hibernate 3.2 を使用する Java Web アプリで作業しています) は、Hibernate の hbm.xml マッピング ファイルの属性値を、eg ファイルからロードするメカニズムを提供しproperties
ますか?
より具体的には、一部のドメイン オブジェクトは、ほとんどの Hibernate マップ クラスとは異なるデータベース カタログにマップされます。したがって、catalog="secondaryCatalogName"
属性を使用して、これらのクラスのカタログ名を指定します。
database.properties
ファイルと Springを使用してPropertyPlaceholderConfigurer
、すべての Spring 構成でデフォルトおよびセカンダリ カタログ名を指定します。ただし、セカンダリ カタログ名を変更する必要がある場合は、これらのいくつかの hbm.xml ファイルのカタログ属性も変更する必要があります。${secondary.catalog}
マッピング ファイルのカタログ属性などのプレースホルダーも使用できれば素晴らしいと思います。
これは可能ですか?
構成スニペットを使用した簡単な例を次に示します。
データベース構造
MySQL instance
- catalog: CatalogA
- table: TableFoo
- table: TableBar
- ...
- catalog: CatalogB
- table: TableBaz
- ...
データベースのプロパティ
primary.catalog=CatalogA
secondary.catalog=CatalogB # <-- wish I could use this property in hbm.xml
SessionFactory -構成 (春):
<bean id="sessionFactory" class="...hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>Foo.hbm.xml</value>
<value>Bar.hbm.xml</value>
<value>Baz.hbm.xml</value>
...
</list>
</property>
...
<property name="hibernateProperties">
<props>
...
<prop key="hibernate.default_catalog">${primary.catalog}</prop>
</props>
</property>
</bean>
Foo.hbm.xml:
CatalogAのドメイン オブジェクトの Hibernate マッピング(プロパティにより、CatalogA エンティティ マッピングは常に正常に機能しhibernate.default_catalog
ます)
<hibernate-mapping>
<class name="Foo" table="TableFoo">
...
</class>
</hibernate-mapping>
Baz.hbm.xml:
CatalogBのドメイン オブジェクトの Hibernate マッピング(これは、catalog属性による問題です。別のセカンダリ カタログ名を使用する場合は、CatalogB エンティティのすべてのhbm.xml で変更する必要があります)
<hibernate-mapping>
<class name="Baz" table="TableBaz" catalog="CatalogB">
...
</class>
</hibernate-mapping>