2 votes

Puis-je charger les valeurs des attributs d'un fichier de mapping Hibernate à partir d'un fichier de propriétés ?

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>

0voto

swemon Points 2799

Utilisez-vous hibernate.properties fichier ?

Vous pouvez y définir d'autres propriétés telles que hibernate.default_schema, hibernate.default_catalog, etc. Propriétés de configuration facultatives

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X