Während zu postgresql Migration, ich bin unten Frage, die unsInkompatible Typen: numerisch und bigint. In PostgeSQL
Schlüsselspalten veh_reg_authority
und id
inkompatibler Typen sind: numeric
und bigint
. Im Folgenden sind Zuordnungen:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "VEH_REG_AUTHORITY", columnDefinition ="Numeric(12,0)")
private VehicleRegistrationAuthority vehicleRegistrationAuthority;
VehicleRegistrationAuthority
hat id
vom Typ Long
so die zu BIGINT
nach PostgreSQL in konvertiert.
So eine einfache Lösung ist, columnDefinition = "Numeric (12,0)" entsprechend zu ändern, aber wir können das nicht tun, da es gut mit Oracle und MySQL funktioniert, und es wurde stark in Out-Code so nicht möglich wechseln.
Im Folgenden sind Arten in Oracle, MySQL und PostgreSQL:
column java type Oracle Mysql PostGreSQL
id Long NUMBER BIGINT BIGINT
veh_reg_authority VehicleRegistrationAuthority NUMBER decimal(12,0) NUMERIC
Während unten Ausgabe gibt Fremdschlüssel überwintern zu schaffen.
Caused by: org.postgresql.util.PSQLException: ERROR: foreign key constraint "fk7gyqskn6x2l2910xhhtjgvh0j" cannot be implemented
Detail: Key columns "veh_reg_authority" and "id" are of incompatible types: numeric and bigint.
Eigentlich, wenn Sie Long (Java-Typ) verwenden, bildet Hibernate es zu java.sql.Types.BIGINT (JDBC-Typ), die wenn in BIGINT in Postgresql zugeordnet werden. Und für einige spezifische präzisionsbasierte Zahlen müssen wir Numerisch verwenden. Numeric und BIGINT sind in MYSQL kompatibel und Oracle verwendet NUMBER sowohl für BIGINT als auch für NUMERIC, so dass keine Probleme bei mysql und Oracle auftreten. –
Sie sollten den gleichen Java-Typ für beide Spalten verwenden, alles andere ist falsch. Dann geht das Problem weg. –