DATAJPA-808 - Introduced AttributeConverters for ZoneId for JSR-310 and ThreeTenBP.

This commit is contained in:
Oliver Gierke
2015-10-05 18:39:34 +02:00
parent dddadd4547
commit 945acce07d
6 changed files with 42 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
import javax.persistence.AttributeConverter;
@@ -32,6 +33,8 @@ import org.springframework.data.convert.Jsr310Converters.InstantToDateConverter;
import org.springframework.data.convert.Jsr310Converters.LocalDateTimeToDateConverter;
import org.springframework.data.convert.Jsr310Converters.LocalDateToDateConverter;
import org.springframework.data.convert.Jsr310Converters.LocalTimeToDateConverter;
import org.springframework.data.convert.Jsr310Converters.StringToZoneIdConverter;
import org.springframework.data.convert.Jsr310Converters.ZoneIdToStringConverter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
/**
@@ -99,4 +102,17 @@ public class Jsr310JpaConverters {
return DateToInstantConverter.INSTANCE.convert(date);
}
}
@Converter(autoApply = true)
public static class ZoneIdConverter implements AttributeConverter<ZoneId, String> {
public String convertToDatabaseColumn(ZoneId zoneId) {
return ZoneIdToStringConverter.INSTANCE.convert(zoneId);
}
@Override
public ZoneId convertToEntityAttribute(String zoneId) {
return StringToZoneIdConverter.INSTANCE.convert(zoneId);
}
}
}

View File

@@ -28,11 +28,14 @@ import org.springframework.data.convert.ThreeTenBackPortConverters.InstantToDate
import org.springframework.data.convert.ThreeTenBackPortConverters.LocalDateTimeToDateConverter;
import org.springframework.data.convert.ThreeTenBackPortConverters.LocalDateToDateConverter;
import org.springframework.data.convert.ThreeTenBackPortConverters.LocalTimeToDateConverter;
import org.springframework.data.convert.ThreeTenBackPortConverters.StringToZoneIdConverter;
import org.springframework.data.convert.ThreeTenBackPortConverters.ZoneIdToStringConverter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.threeten.bp.Instant;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.LocalTime;
import org.threeten.bp.ZoneId;
/**
* JPA 2.1 converters to turn ThreeTen back port types into legacy {@link Date}s. To activate these converters make sure
@@ -101,4 +104,17 @@ public class ThreeTenBackPortJpaConverters {
return DateToInstantConverter.INSTANCE.convert(date);
}
}
@Converter(autoApply = true)
public static class ZoneIdConverter implements AttributeConverter<ZoneId, String> {
public String convertToDatabaseColumn(ZoneId zoneId) {
return ZoneIdToStringConverter.INSTANCE.convert(zoneId);
}
@Override
public ZoneId convertToEntityAttribute(String zoneId) {
return StringToZoneIdConverter.INSTANCE.convert(zoneId);
}
}
}

View File

@@ -19,6 +19,7 @@ import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -35,4 +36,5 @@ public class DateTimeSample {
LocalDate localDate;
LocalTime localTime;
LocalDateTime localDateTime;
ZoneId zoneId;
}

View File

@@ -24,6 +24,7 @@ import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@@ -68,6 +69,7 @@ public class Jsr310JpaConvertersIntegrationTests extends AbstractAttributeConver
sample.localDate = LocalDate.now();
sample.localTime = LocalTime.now();
sample.localDateTime = LocalDateTime.now();
sample.zoneId = ZoneId.of("Europe/Berlin");
em.persist(sample);
em.flush();
@@ -80,5 +82,6 @@ public class Jsr310JpaConvertersIntegrationTests extends AbstractAttributeConver
assertThat(result.localDate, is(sample.localDate));
assertThat(result.localTime, is(sample.localTime));
assertThat(result.localDateTime, is(sample.localDateTime));
assertThat(result.zoneId, is(sample.zoneId));
}
}

View File

@@ -23,6 +23,7 @@ import org.threeten.bp.Instant;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.LocalTime;
import org.threeten.bp.ZoneId;
/**
* @author Oliver Gierke
@@ -36,4 +37,5 @@ public class DateTimeSample {
LocalDate localDate;
LocalTime localTime;
LocalDateTime localDateTime;
ZoneId zoneId;
}

View File

@@ -32,6 +32,7 @@ import org.threeten.bp.Instant;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.LocalTime;
import org.threeten.bp.ZoneId;
/**
* Integration tests for {@link ThreeTenBackPortJpaConverters}.
@@ -68,6 +69,7 @@ public class ThreeTenBackPortJpaConvertersIntegrationTests extends AbstractAttri
sample.localDate = LocalDate.now();
sample.localTime = LocalTime.now();
sample.localDateTime = LocalDateTime.now();
sample.zoneId = ZoneId.of("Europe/Berlin");
em.persist(sample);
em.flush();
@@ -80,5 +82,6 @@ public class ThreeTenBackPortJpaConvertersIntegrationTests extends AbstractAttri
assertThat(result.localDate, is(sample.localDate));
assertThat(result.localTime, is(sample.localTime));
assertThat(result.localDateTime, is(sample.localDateTime));
assertThat(result.zoneId, is(sample.zoneId));
}
}