2016-09-09 2 views
1

zugeordnet Nun, meins ist eine dumme Frage.JSR-310 Jahr zu TINYBLOB in MySQL

Mit Hibernate 5.1 (5.2 das gleiche) meine Spalte wird tinyblob anstatt der intuitiven int Spalte zugeordnet, die man erwarten würde. Andere JSR-310-Spalten werden erfolgreich zugeordnet.

z.

@Column(name = "ANNO_PROTOCOLLO", nullable = true) 
protected Year annoProtocollo; 

@Column(name = "CREATED", nullable = false, updatable = false, insertable = true) 
protected LocalDateTime created = LocalDateTime.now(); 

Die erste Spalte wird tinyblob abgebildet, aber der zweite ist korrekt zu datetime abgebildet, die der SQL-Standard für diese Werte sind.

Wieder ist meine Frage albern, weil nichts mich daran hindert, diese Year-Spalte als int zu deklarieren, aber ich wollte den Grund dahinter verstehen und wenn es einen Weg gibt, weniger als 3 Zeilen Code zu map Jahr bis Int. Da ich auf mehreren Datenbanken arbeiten müssen, kann ich nicht @Column(columnDefinition) akzeptieren und wenn das die einzige Lösung ist, werde ich nur Integer verwenden und damit leben, wie ich schon

tat
+1

JDBC definiert die Datentypzuordnung für 'LocalDate',' LocalDateTime', 'LocalTime',' OffsetDateTime' und 'OffsetTime'; Der Typ 'Year' ist kein solcher Typ (es gibt keinen äquivalenten Typ im SQL-Standard). –

+0

Dank @MarkRotteveel, Ihr Kommentar zeigt deutlich die Situation auf. Nun, würden Sie aus Sicht der Spekulation ** persönlich zustimmen, dass "int" eine korrekte Zuordnung sein könnte? Nur zu Diskussionszwecken ändere ich meine Spalte in Integer asap –

+0

@MarkRotteveel Ist das in Java 9? Weil JDBC 4.2 (Java 8) keine Mappings für die neuen 'java.time' Klassen definiert, soweit ich das finde. – Andreas

Antwort

2

Die einfache Grund ist, dass sie nicht vorsah eine spezifische Zuordnung für , so erhalten Sie die Standardzuordnung der Objektserialisierung zu/von Bytes, dh ein BLOB.

Sie können einen benutzerdefinierten Typ implementieren, um ein Mapping bereitzustellen.
Siehe Hibernate Domain Model Mapping Guide - Custom BasicTypes.