Utiliser les dates Java 8 du package java.time avec Hibernate 4

hibernate_logo_a

Hibernate 4 ne supporte pas les nouveaux types de dates introduits avec Java 8.
Il est toutefois possible de convertir les types LocalDate et LocalDateTime automatiquement en utilisant un Converter pour chacun de ces types.

Voici comment procéder :

Utiliser la classe suivante pour convertir automatiquement les LocalDate :

import java.time.LocalDate;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate, java.sql.Date> {

	@Override
	  public java.sql.Date convertToDatabaseColumn(LocalDate entityValue) {
	    if (entityValue != null) {
	      return java.sql.Date.valueOf(entityValue);
	    }
	    return null;
	  }

	  @Override
	  public LocalDate convertToEntityAttribute(java.sql.Date databaseValue) {
	    if (databaseValue != null) {
	      return databaseValue.toLocalDate();
	    }
	    return null;
	  }
}

Pour les LocalDateTime :

import java.time.LocalDateTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class LocalDateTimePersistenceConverter implements AttributeConverter<LocalDateTime, java.sql.Timestamp>{

	@Override
	  public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime entityValue) {
	    if (entityValue != null) {
	      return java.sql.Timestamp.valueOf(entityValue);
	    }
	    return null;
	  }

	  @Override
	  public LocalDateTime convertToEntityAttribute(java.sql.Timestamp databaseValue) {
	    if (databaseValue != null) {
	      return databaseValue.toLocalDateTime();
	    }
	    return null;
	  }
}

Ces converter peuvent être utiles sur un projet qui n’utilise pas Hibernate 5, ce dernier supportant les Date Java 8 en ajoutant la dépendance hibernate-java8.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.