2017-03-29 2 views
1

Für eine H2 Datenbankschema Zuordnung zu einer Entität mit einem UUID, die Hibernate ddl Validierung fehlschlägt mit der Ausnahme:Hibernate Datenbank-Schema-Validierung für H2-Datenbank schlägt fehl, wenn Unternehmen UUID enthalten

Ursache: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-Validierung: falscher Spaltentyp in der Spalte [testuuid] in Tabelle gefunden [TEST. dummy]; gefunden [varbinary (Typ # VARBINARY)], aber erwarten [binär (Typ # BINARY)]

Setup:

  • Hibernate 5.2.9.Final
  • H2 1.4.194

weitere Hibernate Einstellungen:

  • hibernate.h bm2ddl.auto = validate
  • Datenbankdialekt wird nicht explizit festgelegt.

Die H2 DDL wird zunächst mit Hibernate was in dem UUID erzeugt durch Binärdienst in dem H2-Datenbankschema dargestellt werden.

Deaktivieren der Validierung funktioniert, ist aber keine Option.

Wie kann ich dieses Problem lösen?

Antwort

1

Die Ursache ist, dass in der H2 Datenbank einige Datentypen Synonym, aber hibernate currently does not handle this fact sind.

Es gibt another stackoverflow question targeting a similar issue mit H2 gibt einen Synonym-Typ statt der erwarteten zurück.

A workaround is proposed in the related hibernate bugtracker ticket. Nur implementieren ein benutzerdefinierte H2 Dialekt überwintern, die wie folgt aussehen:

import java.sql.Types; 
import org.hibernate.dialect.H2Dialect; 

public class H2DialectCustom extends H2Dialect { 

    public H2DialectCustom() { 
     super(); 
     registerColumnType(Types.BINARY, "varbinary"); 
    } 

} 

und registrieren Sie es in Ihrem Hibernate/JPA Einstellungen:

hibernate.dialect = H2DialectCustom

Verwandte Themen