Wpis z mikrobloga

#programowanie #java
Mam klase z nastepujacym polem:

@NotNull
@Column(name = "time_event", nullable = false, columnDefinition = "time")
private LocalTime time;

Niestety nie potrafie tego zmapowac do bazy danych (postgres). Uzywam jpa i hibernate w wersji 5.0.4.Final. Potrzebuje jakiejs nowej adnotacji? Czy jakis parser do czegos takiego?
Podczas zapisu leci mi blad:
org.postgresql.util.PSQLException: ERROR: column "timeevent" is of type time without time zone but expression is of type bytea

Jak zmienie kolumne na bytea, spoko da sie zapisac, ale jest problem z kolei z odczytem. Mial ktos podobny problem?
  • 11
Jak zmienie kolumne na bytea, spoko da sie zapisac, ale jest problem z kolei z odczytem. Mial ktos podobny problem?


@pulla: owszem, w tej sytuacji probujesz zapisac zserializowana klase. Potrzebujesz odpowiedniego mappera dla tego typu pól
@pulla: Pytanie nie jest, czemu nie działa, tylko dlaczego chcesz używać jakiejś dziwnej klasy w mapowaniach. W mappingach powinny być typy proste obsługiwane przez bazę. Ewentualnie jak używasz jakiegoś obcego Entity to musi być zamapowany i dodany w adnotacjach typ relacji.
@XvAK: Tak LocalTime z jdk8 juz znalazłem rozwiązanie.

@Converter(autoApply = true)
public class LocalTimeConverter implements AttributeConverter {
// mapping with java.util.Calendar breaks EclipseLink

@Override
public Time convertToDatabaseColumn(LocalTime attribute) {
if (attribute == null) {
return null;
}
return Time.valueOf(attribute);
}

@Override
public LocalTime convertToEntityAttribute(Time dbData) {
if (dbData == null) {
return null;
}

return dbData.toLocalTime();
}

}

I do tego Adnotacja Convert nad polem ze wskazaniem klasy.