Blog

Entwickeln aus Leidenschaft

Auf meinem Blog schreibe ich über alles, was mir in den Sinn kommt;) Das können Tipps und nützliche Code-Schnipsel sein oder Themen, mit denen ich mich ganz aktuell beschäftige. Aber auch interessante Neuigkeiten und Links können ihren Weg hierhin finden.

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:

@
(Email Adresse wird nicht veröffentlicht)
(kein HTML erlaubt)
Bitte beantworten Sie die einfache mathematische Frage.
  


0 Kommentare