Hibernate ou la combinaison de Spring Framework et d'Hibernate (je travaille sur une application web Java qui utilise Spring 2.5 et Hibernate 3.2) offre-t-il un mécanisme permettant de charger les valeurs d'attributs dans les fichiers de mappage hbm.xml d'Hibernate à partir, par exemple, des éléments suivants properties
des fichiers ?
Plus précisément, certains de nos objets de domaine sont mappés sur un catalogue de base de données différent de celui de la plupart des classes mappées par Hibernate. Ainsi, nous utilisons le catalog="secondaryCatalogName"
pour spécifier le nom du catalogue pour ces classes.
Nous utilisons un database.properties
et le fichier de Spring PropertyPlaceholderConfigurer
pour spécifier les noms de catalogue par défaut et secondaire dans toute notre configuration de Spring. Cependant, si je dois changer le nom du catalogue secondaire, je dois également changer l'attribut catalogue dans ces quelques fichiers hbm.xml. Ce serait génial si je pouvais utiliser un caractère de remplacement tel que ${secondary.catalog}
pour l'attribut de catalogue dans les fichiers de mappage également.
Est-ce possible ?
Voici un exemple simplifié utilisant des extraits de configuration :
Structure de la base de données
MySQL instance
- catalog: CatalogA
- table: TableFoo
- table: TableBar
- ...
- catalog: CatalogB
- table: TableBaz
- ...
database.properties
primary.catalog=CatalogA
secondary.catalog=CatalogB # <-- wish I could use this property in hbm.xml
SessionFactory -configuration (Spring) :
<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 :
Mappage Hibernate pour un objet de domaine en CatalogueA (Les mappages d'entités de CatalogA fonctionnent toujours bien grâce à hibernate.default_catalog
propriété)
<hibernate-mapping>
<class name="Foo" table="TableFoo">
...
</class>
</hibernate-mapping>
Baz.hbm.xml :
Mappage Hibernate pour un objet de domaine en CatalogueB (c'est le problème à cause de la catalogue l'attribut : il doit changer en todos hbm.xmls des entités du catalogue B si je veux utiliser un nom de catalogue secondaire différent)
<hibernate-mapping>
<class name="Baz" table="TableBaz" catalog="CatalogB">
...
</class>
</hibernate-mapping>