J'ai quelques entités dans ma couche de données stockées dans un schéma particulier. Par exemple:
@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}
J'essaie de configurer la base de données intégrée H2 pour les tests d'intégration de ma couche de données. J'utilise l'annotation @DataJpaTest
Pour mes tests afin de configurer automatiquement la base de données intégrée H2. Cependant, la création de tables échoue car le schéma DUMMY
n'est pas créé lors de l'initialisation de la base de données.
Des idées sur la façon de créer un schéma avant la création de tables dans des cas de test?
J'ai essayé d'utiliser @Sql (instructions = "CREATE SCHEMA IF NOT EXISTS DUMMY") mais j'ai échoué.
J'ai également essayé de définir spring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY
Dans mon fichier test.properties
Avec TestPropertySource("classpath:test.properties")
, mais cela n'a pas fonctionné aussi.
J'ai eu le même problème, j'ai réussi à le résoudre en créant schema.sql (dans le dossier des ressources) avec le contenu
CREATE SCHEMA IF NOT EXISTS <yourschema>
La documentation peut être trouvée ici mais à mon humble avis, le manque d'exemples réels la rend très complexe. Attention: ce script est également exécuté dans l'environnement normal (pas de test).
Pas obligatoire, mais bonne pratique, ajoutez la dépendance h2 uniquement dans la portée du test
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
Après quelques heures de lutte, j'ai trouvé une solution.
Vous pouvez définir spring.jpa.properties.hibernate.default_schema = DUMMY
Dans votre application.properties
.
Ensuite, définissez spring.jpa.properties.hibernate.default_schema =
Dans votre test.properties
Et utilisez-le avec @TestPropertySource("classpath:test.properties")
Ainsi, de cette manière, le schéma DUMMY ne sera pas créé et les entités seront créées dans le schéma par défaut.