Bonjour tout le monde,
J'ai une application fonctionnant avec Spring Boot, j'utilise donc les JPA pour gérer la base de données et une base H2 pour faire mes tests (première fois que je travaille avec). J'ai une requête en native dans mon repository qui récupère le dernier ID généré :
En production, sur une base MariaDB, la requête fonctionne très bien, et le web service qui y fait appel (via le repository) aussi. Mais en passant par mon test d'intégration avec la base H2, la colonne AUTO_INCREMENT pose problème. Voici l'erreur qui ressort :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Query(value = "SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = \"myapp\" AND TABLE_NAME = \"mytable\"", nativeQuery = true) public Long getNextId();
Voici le code du test et mes propriétés pour l'environnement de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Column "AUTO_INCREMENT" not found; SQL statement: SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = "myapp" AND TABLE_NAME = "mytable" [42122-200] 2020-02-11 11:44:51.341 DEBUG 14296 --- [ main] .w.s.m.a.ResponseStatusExceptionResolver : Resolved [com.extia.mm.excpetion.BadRequestException: could not prepare statement; SQL [SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = "myapp" AND TABLE_NAME = "mytable"]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 @Autowired private MockMvc mvc; @Autowired ObjectMapper objectMapper; @Rule public TemporaryFolder folder = new TemporaryFolder(); @Test public void createCarteIntegration() throws Exception { // Initialisation des données File file = new File("src/test/resources/com/extia/mm/images/supfiles.png"); InputStream is = new FileInputStream(file); MockMultipartFile mmf = new MockMultipartFile("file", is); mvc.perform(multipart("/save/carte").file(mmf).queryParam("nom", "SupFiles").queryParam("description", "une description quelconque avec des é è @ \' \" & $")).andDo(print()).andExpect(status().isCreated()); }J'ai essayé pas mal de configurations possibles, j'ai cherché des problèmes similaires mais je n'en ai pas trouvé. Je sèche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL;INIT=CREATE SCHEMA IF NOT EXISTS testdb; spring.datasource.driverClassName=org.h2.Driver spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect spring.jpa.properties.hibernate.default_schema=testdb spring.h2.console.enabled=true spring.h2.console.path=/h2 spring.jpa.hibernate.ddl-auto =update spring.jpa.database-platform =org.hibernate.dialect.MySQL8Dialect logging.level.org.springframework.web=DEBUG
J'espère que j'ai été assez précis.
Merci d'avance pour votre aide !
Partager