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é :

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();
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
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]
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
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());
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
spring.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'ai essayé pas mal de configurations possibles, j'ai cherché des problèmes similaires mais je n'en ai pas trouvé. Je sèche...

J'espère que j'ai été assez précis.
Merci d'avance pour votre aide !