JPA und die Java 8 Date Time API


Mit Java SE 8 kam die gelungene Date-Time-Api. Musste man, wenn es denn etwas komfortabler sein sollte, bis dahin mit Bibliotheken wie Yoda-Time arbeiten, kann nun auch mit den Standard-Bibliotheken komfortabel gearbeitet werden. Bei der Nutzung von LocalDate und LocalDateTime in Kombination mit JPA gibt es allerdings an der ein oder anderen Stelle Konvertierungsbedarf bevor in eine Datenbank gespeichert oder aus dieser gelesen wird. Nachfolgend ein paar Lösungsmöglichkeiten durch die Verwendung von Konvertern.

Date <-> LocaDate


import java.time.Instant;
import java.time.LocalDate;
import java.util.Date;

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LocalDateConverter implements AttributeConverter {

	@Override
	public Date convertToDatabaseColumn(LocalDate date) {
		if (date == null) {
			return null;
		}
		Instant instant = Instant.from(date);
		return Date.from(instant);
	}

	@Override
	public LocalDate convertToEntityAttribute(Date date) {
		if (date == null) {
			return null;
		}
		Instant instant = date.toInstant();
		return LocalDate.from(instant);
	}
}

Date <-> LocaDateTime


import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LocalDateTimeConverter implements AttributeConverter {

	@Override
	public Date convertToDatabaseColumn(LocalDateTime date) {
		if (date == null) {
			return null;
		}
		Instant instant = date.toInstant(ZoneOffset.UTC);
		return Date.from(instant);
	}

	@Override
	public LocalDateTime convertToEntityAttribute(Date date) {
		if (date == null) {
			return null;
		}
		Instant instant = Instant.ofEpochMilli(date.getTime());
		return LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
	}
}


Weiterführende Links

Tags: JPA, LocalDate, LocalDateTime, Converter
Guido Oelmann     Mittwoch, 17. August 2016 0    944
@
(Email Adresse wird nicht veröffentlicht)
(kein HTML erlaubt)
Bitte beantworten Sie die einfache mathematische Frage.
  


Keine Kommentare vorhanden.