web-dev-qa-db-fra.com

Aucun mappage de dialecte pour le type JDBC: 1111

Je travaille sur une application Spring JPA, en utilisant MySQL comme base de données. Je me suis assuré que toutes les bibliothèques spring-jpa, hibernate et mysql-connector-Java sont chargées.

J'exécute une instance de MySQL 5. Voici un extrait de mon fichier application.properties:

spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

spring.datasource.url=jdbc:mysql://localhost/mydatabase
spring.datasource.username=myuser
spring.datasource.password=SUPERSECRET
spring.datasource.driverClassName=com.mysql.jdbc.Driver

Lors de l'exécution d'un test d'intégration, Spring démarre correctement, mais échoue lors de la création de la session hibernate SessionFactory, à l'exception de:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

Je pense que mes dialectes devraient être Mysql5Dialect. J'ai aussi essayé celui qui énonce explicitement InnoDB et les deux options de dialecte qui n'indiquent pas la version 5. Mais je finis toujours avec le même message 'Pas de dialecte pour le type JDBC: 1111' . Mon fichier application.properties réside dans le dossier source test/resources. Il est reconnu par le lanceur de tests JUnit (j'ai déjà eu une exception à cause d'une faute de frappe).

Est-ce que les propriétés que je me suis trompé? Je ne pouvais pas trouver de documentation officielle sur ces noms de propriété, mais j'ai trouvé un indice dans cette réponse de stackoverflow: https://stackoverflow.com/a/25941616/1735497

Dans l'attente de vos réponses, merci!

BTW L'application utilise déjà le démarrage à ressort.

15
SakeSushiBig

Voici la réponse basée sur le commentaire de SubOptimal:

Le message d'erreur indique en fait qu'un type de colonne ne peut pas être mappé sur un type de base de données par hibernate . Dans mon cas, il s'agissait du type Java.util.UUID que j'utilise comme clé primaire dans certaines de mes entités. Il suffit d'appliquer l'annotation @Type(type="uuid-char") (pour postgres @Type(type="pg-uuid"))

13
SakeSushiBig

Veuillez vérifier si certains retours de colonnes ont unknow Type in Query.

Exemple: '1' en tant que nom_colonne peut avoir un type inconnu 

et 1 puisque nom_colonne est Integer est correct Un.

Cette chose a fonctionné pour moi.

7
jaskirat Singh

Il existe également un autre cas d'utilisation courant générant cette exception. Fonction d'appel qui retourne void. Pour plus d'informations et de solutions, allez ici .

7
icl7126

Parfois, lorsque vous appelez procédure/fonction SQL, il peut être nécessaire de renvoyer quelque chose. Vous pouvez essayer de retourner void: RETURN; ou string (celui-ci a fonctionné pour moi): RETURN 'OK'

3
Klapsa2503

J'ai eu la même erreur parce que ma requête a renvoyé une colonne UUID. Pour résoudre ce problème, j'ai renvoyé la colonne UUID en tant que type varchar via la requête "cast (nom de colonne en tant que varchar)", puis cela a fonctionné. 

Exemple:

public interface StudRepository extends JpaRepository<Mark, UUID> {

    @Modifying
    @Query(value = "SELECT Cast(stuid as varchar) id, SUM(marks) as marks FROM studs where group by stuid", nativeQuery = true)
    List<Student> findMarkGroupByStuid();

    public static interface Student(){
        private String getId();
        private String getMarks();
    }
}
1
Ramya

Dans mon cas, le problème était que, j'ai oublié d'ajouter l'attribut resultClasses lors de la configuration de ma procédure stockée dans ma classe User.

@NamedStoredProcedureQuery(name = "find_email",
                procedureName = "find_email", resultClasses = User.class, //<--I forgot that. 
                parameters = {
                    @StoredProcedureParameter(mode = ParameterMode.IN, name = "param_email", type = String.class)
                }),
0
GaborH

Pour tous ceux qui rencontrent cette erreur avec une ancienne version d'Hibernate (3.x):

n'écrivez pas le type de retour en majuscules. Le mappage d'implémentation de type hibernate utilise des types de retour minuscules et ne les convertit pas:

CREATE OR REPLACE FUNCTION do_something(param varchar)
    RETURNS integer AS
$BODY$
...
0
Anubis