2016-08-08 16 views
4

Ich versuche, meine Hibernate-basierte Anwendung von MySQL zu Postgres migrieren, aber es scheint ein Problem mit dem DatumsformatERROR: Typ „Datumzeit“ nicht existiert

In meinem Wesen zu sein Ich habe

@Entity 
@Table(name = "APP_USERS") 
public class User { 

    @Id 
    @GeneratedValue(generator="increment") 
    @GenericGenerator(name="increment", strategy = "increment") 
    private int id; 

    private String username; 
    private String email; 
    private String password; 
    private String firstname; 
    private String lastname; 
    private Timestamp joindate; 
    ... 

aber ich erhalte eine Fehlermeldung, wenn Sie die Tabelle erstellen

ERROR: type "datetime" does not exist 

die sQL von "showsql" ist

Hibernate: create table APP_USERS (id integer not null, email varchar(255), firstname varchar(255), joindate datetime, lastname varchar(255), password varchar(255), username varchar(255), primary key (id)) 

Ich habe postgresql-9.5.3-1 lokal installiert und ich bin mit Hibernate Version 5.0.10.Final

für diesen Fehler auf Google Such mir sehr wenige Ergebnisse.

Antwort

5

Die obere restult von einer Google-Suche hatte für Datums- und Zeitdatentypen. Es würde von dieser Seite offensichtlich sein, dass Ihr Framework eine DDL generieren muss, die "Zeitstempel" anstelle von "Datum/Uhrzeit" verwendet.

Wenn ein Anwendungsframework falsche Datentypen für SQL DDL generiert, ist das wahrscheinlichste Problem, dass es für die Verwendung der falschen Datenbank konfiguriert ist. In Ihrem Fall ist es wahrscheinlich immer noch für die Verwendung von MySQL konfiguriert. Reconfigure für PostgreSQL.

1

PostgreSQL hat keinen Datetime-Datentyp. Für eine Kombination aus beiden benötigen Sie "Zeitstempel ohne Zeitzone".

https://www.postgresql.org/docs/9.5/static/datatype-datetime.html

+0

ok, wissen Sie, welche Klasse und/oder Anmerkung ich in Hibernate verwenden sollte, um zu sagen, dass sie nicht "datetime" verwendet, sondern "timestamp" verwendet? –

+0

warte, jetzt sehe ich, dass ich ' org.hibernate.dialect.MySQLDialect' –

0

jetzt sehe ich, dass ich für "postgresql Datetime" zu PostgreSQL Dokumentation genommen Sie hätte

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 

statt

<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
Verwandte Themen