it-swarm.com.de

Keine Dialektzuordnung für JDBC-Typ: 1111

Ich arbeite an einer Spring-JPA-Anwendung, die MySQL als Datenbank verwendet. Ich habe sichergestellt, dass alle spring-jpa-Bibliotheken, der Ruhezustand und der mysql-Connector-Java geladen sind.

Ich führe eine Mysql 5-Instanz aus. Hier ist ein Auszug meiner Datei 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

Wenn Sie einen Integrationstest ausführen, startet der Spring ordnungsgemäß, schlägt jedoch beim Erstellen der Hibernate SessionFactory fehl, mit der Ausnahme:

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

Ich denke, meine Dialekte sollten Mysql5Dialect sein. Ich habe auch versucht, die InnoDB explizit anzugeben, und die beiden Dialektoptionen, die nicht die Version 5 anzeigen. Aber ich ende immer mit der gleichen Meldung "No Dialect Mapping for JDBC type: 1111" . Meine Datei application.properties befindet sich im Quellordner test/resources. Es wird vom JUnit Test-Runner erkannt (ich habe zuvor eine Ausnahme wegen eines Tippfehlers erhalten).

Sind die Eigenschaften falsch eingestellt? Ich konnte keine offizielle Dokumentation zu diesen Eigenschaftsnamen finden, aber einen Hinweis in dieser Stackoverflow-Antwort finden: https://stackoverflow.com/a/25941616/1735497

Ich freue mich auf Ihre Antworten, danke!

Übrigens Die Anwendung verwendet bereits einen Spring Boot.

15
SakeSushiBig

Hier die Antwort basierend auf dem Kommentar von SubOptimal:

Die Fehlermeldung besagt tatsächlich, dass ein Spaltentyp nicht durch Hibernate ..__ einem Datenbank-Typ zugeordnet werden kann. In meinem Fall war es der Typ Java.util.UUID, den ich in einigen Entitäten als Primärschlüssel verwende. Wenden Sie einfach die Annotation @Type(type="uuid-char") an (für Postgres @Type(type="pg-uuid"))

13
SakeSushiBig

Bitte prüfen Sie, ob in einer Spalte viele unbekannten Typ in Query enthalten sind.

zB: '1' als Spaltenname kann vom Typ unbekannt sein 

und 1 als Spaltenname ist Integer ist korrekt Eins.

Dieses Ding hat für mich funktioniert.

7
jaskirat Singh

Es gibt auch einen anderen Anwendungsfall, der diese Ausnahme auslöst. Aufrufende Funktion, die void zurückgibt. Weitere Informationen und Lösungen finden Sie unter hier .

7
icl7126

Wenn Sie die Prozedur/Funktion von SQL aufrufen, kann es manchmal erforderlich sein, etwas zurückzugeben. Sie können versuchen, void zurückzugeben: RETURN; oder Zeichenfolge (dieser hat für mich funktioniert): RETURN 'OK'

3
Klapsa2503

Ich habe den gleichen Fehler erhalten, weil meine Abfrage eine UUID-Spalte zurückgegeben hat. Um das zu beheben, habe ich die UUID-Spalte als varchar-Typ durch die Abfrage wie "cast (columnName as varchar)" zurückgegeben. 

Beispiel:

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

Wenn Sie Postgres verwenden, stellen Sie sicher, dass Sie keine Spalte vom Typ Abstime haben. Abstime ist ein interner Postgres-Datentyp, der von JPA nicht erkannt wird. In diesem Fall kann die Konvertierung in Text mithilfe von TO_CHAR hilfreich sein, wenn dies nach Ihren geschäftlichen Anforderungen zulässig ist.

0
tutak

Dies passiert auch, wenn Sie den Ruhezustand verwenden und eine Stornofunktion zurückgeben. AT least w/postgres. Es weiß nicht, wie man mit der Lücke umgeht. Am Ende musste ich meine Lücke in eine return int ändern.

0
Mike Packer

In meinem Fall bestand das Problem darin, dass ich vergessen habe, das resultClasses-Attribut hinzuzufügen, wenn ich meine gespeicherte Prozedur in meiner Benutzerklasse einrichte.

@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

Für alle, die diesen Fehler mit einer alten Version (3.x) im Ruhezustand erhalten:

schreiben Sie den Rückgabetyp nicht in Großbuchstaben. Die Implementierung des Hibernatetyps verwendet Kleinschreibungstypen und konvertiert sie nicht:

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