Académique Documents
Professionnel Documents
Culture Documents
[Sous-titre du document]
Khalil
[Date]
1 UN GUIDE POUR JPA AVEC SPRING
1.1 APERÇU
Ce chapitre montre comment configurer Spring avec JPA en utilisant Hibernate comme
fournisseur de persistance.
Pour une introduction étape par étape sur la configuration du contexte Spring en utilisant la
configuration basée sur Java et le fichier pom Maven de base pour le projet, consultez cet
article. (https://www.baeldung.com/bootstraping-a-web-application-with-spring-and-java-
based-configuration)
Nous commencerons par configurer JPA dans un projet Spring Boot, puis nous examinerons
la configuration complète nécessaire pour un projet Spring standard.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
Le spring-boot-starter contient la configuration automatique nécessaire pour Spring JPA. De
plus, le projet spring-boot-starter-jpa référence toutes les dépendances nécessaires telles que
hibernate-entitymanager.
1.2.2 Configuration
Spring Boot configure Hibernate comme le fournisseur JPA par défaut, il n'est donc plus
nécessaire de définir le bean entityManagerFactory à moins que nous voulions le
personnaliser.
Spring Boot peut également auto-configurer le bean dataSource, en fonction de la base de
données que nous utilisons. Dans le cas d'une base de données en mémoire de type H2,
HSQLDB et Apache Derby, Boot configure automatiquement le DataSource si la dépendance
de la base de données correspondante est présente dans le classpath.
Par exemple, si nous voulons utiliser une base de données H2 en mémoire dans une
application Spring Boot JPA, nous devons simplement ajouter la dépendance h2 au fichier
pom.xml :
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
De cette manière, nous n'avons pas besoin de définir le bean dataSource, mais nous pouvons
le faire si nous voulons le personnaliser.
Si nous voulons utiliser JPA avec la base de données MySQL, alors nous avons besoin de la
dépendance mysql-connector-java, ainsi que de définir la configuration du DataSource.
Nous pouvons le faire dans une classe @Configuration, ou en utilisant les propriétés standard
de Spring Boot.
La configuration Java ressemble à celle d'un projet Spring standard :
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(“com.mysql.cj.jdbc.Driver”);
dataSource.setUsername(“mysqluser”);
dataSource.setPassword(“mysqlpass”);
dataSource.setUrl(“jdbc:mysql://localhost:3306/myDb?
createDatabaseIfNotExist=true”);
return dataSource;
}
Pour configurer la source de données en utilisant un fichier de propriétés, nous devons définir
des propriétés préfixées par spring.datasource :
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=mysqluser
spring.datasource.password=mysqlpass
spring.datasource.url=
jdbc:mysql://localhost:3306/myDb?createDatabaseIfNotExist=true
@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig{
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
{
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[] { “com.baeldung.persistence.
model” });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
// ...
}
Nous devons également définir explicitement le bean DataSource que nous avons utilisé ci-
dessus :
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(“com.mysql.cj.jdbc.Driver”);
dataSource.setUrl(“jdbc:mysql://localhost:3306/spring_jpa”);
dataSource.setUsername( “tutorialuser” );
dataSource.setPassword( “tutorialmy5ql” );
return dataSource;
}
La dernière partie de la configuration concerne les propriétés Hibernate supplémentaires ainsi
que les beans TransactionManager et exceptionTranslation :
@Bean
public PlatformTransactionManager
transactionManager(EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new
JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor
exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty(“hibernate.hbm2ddl.auto”, “create-drop”);
properties.setProperty(“hibernate.dialect”, “org.hibernate.dialect.
MySQL5Dialect”);
return properties;
}
En note supplémentaire, si Hibernate était le fournisseur de persistance, c'est ainsi que l'on
spécifierait les propriétés spécifiques à Hibernate.
Notez que la dépendance MySQL est incluse à titre d'exemple. Nous avons besoin d'un pilote
pour configurer la source de données, mais n'importe quelle base de données prise en charge
par Hibernate fera l'affaire.
1.2.7 Conclusion
Ce chapitre a illustré comment configurer JPA avec Hibernate dans Spring à la fois dans une
application Spring Boot et dans une application Spring standard.
Comme toujours, le code présenté dans ce chapitre est disponible sur Github.
2 INITIALISATION DE HIBERNATE 5 AVEC SPRING
2.1 APERÇU
Dans ce chapitre, nous discuterons de la manière d'initialiser Hibernate 5 avec Spring en
utilisant à la fois une configuration Java et XML.