Relu
Relecture RB
Sommaire :
Création de la structure de la base de données
Il est possible de configurer la couche JPA pour l'autoriser à automatiquement créer (où mettre à jour) la structure de la base de données. Ceci notamment parce que nous utilisons l'implémentation Hibernate de JPA qui offre cette fonctionnalité.
Pour activer activer la fonctionnalité il faut dans le fichier resources/properties/dao/dao.xml, positionner la propriété generateDdl à true :
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="${datasource.bean}" />
<property name="jpaVendorAdapter">
<bean>
<property name="showSql" value="true" />
<property name="generateDdl" value="#{ systemProperties[generateDdl]?:false }" />
<property name="database" value="${jpa.database.type}" />
</bean>
</property>
<property name="persistenceXmlLocation" value="classpath*:META-INF/example-dao-persistence.xml" />
<property name="jpaProperties" ref="jpaProperties" />
</bean>
En fait, on voit ici que la propriété generateDdl du jpaVendorAdapter est évaluée via une EL Spring. Par défaut, sa valeur vaudra false. Ceci permet de NE PAS mettre à jour la base de données à chaque démarrage de l'application mais de le faire explicitement.
Pour cela ESUP-Commons propose un module batch dont une des commande sert à initialiser la base de données. L'appel à cette commande positionne la variable d'environnement generateDdl à true ce qui fait que la propriété generateDdl du jpaVendorAdapter est elle même positionnée à true.
La commande batch se lance via :
jar <appli>-batch-<version>.jar init-db
Mise à jour de la structure de la base de données
Le principe est le même que pour la création de la base de données sauf que la commande à lancer est :
jar <appli>-batch-<version>.jar upgrade-db