diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java index a043d0eede..4ae5d17349 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java @@ -36,6 +36,17 @@ public Object getUpdateValue(BeanProperty prop, EntityBean bean, long now) { } } + /** + * Instant support. + */ + public static class InstantDT extends Base { + + @Override + public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { + return JavaTimeUtils.toInstant(now); + } + } + /** * LocalDateTime support. */ diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java index 0e8f119a1c..d3d06e9c31 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java @@ -31,6 +31,22 @@ public boolean isDDLNotNullable() { } } + /** + * Instant support. + */ + public static class InstantDT extends Base { + + @Override + public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { + return JavaTimeUtils.toInstant(now); + } + + @Override + public Object getUpdateValue(BeanProperty prop, EntityBean bean, long now) { + return JavaTimeUtils.toInstant(now); + } + } + /** * LocalDateTime support. */ diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java index 3dd4ee0c75..c07426bbe2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java @@ -5,6 +5,7 @@ import javax.persistence.PersistenceException; import java.sql.Timestamp; +import java.time.Instant; import java.time.LocalDateTime; import java.time.OffsetDateTime; import java.time.ZonedDateTime; @@ -27,6 +28,7 @@ public InsertTimestampFactory(ClassLoadConfig classLoadConfig) { map.put(long.class, longTime); if (classLoadConfig.isJavaTimePresent()) { + map.put(Instant.class, new GeneratedInsertJavaTime.InstantDT()); map.put(LocalDateTime.class, new GeneratedInsertJavaTime.LocalDT()); map.put(OffsetDateTime.class, new GeneratedInsertJavaTime.OffsetDT()); map.put(ZonedDateTime.class, new GeneratedInsertJavaTime.ZonedDT()); diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java index d1077e34dd..dda1097f69 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java @@ -11,6 +11,13 @@ */ public class JavaTimeUtils { + /** + * Return the system millis time as a LocalDateTime. + */ + public static Object toInstant(long systemMillis) { + return Instant.ofEpochMilli(systemMillis); + } + /** * Return the system millis time as a LocalDateTime. */ diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java index 76a40d09a7..dd7c1653ab 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java @@ -5,6 +5,7 @@ import javax.persistence.PersistenceException; import java.sql.Timestamp; +import java.time.Instant; import java.time.LocalDateTime; import java.time.OffsetDateTime; import java.time.ZonedDateTime; @@ -27,6 +28,7 @@ public UpdateTimestampFactory(ClassLoadConfig classLoadConfig) { map.put(long.class, longTime); if (classLoadConfig.isJavaTimePresent()) { + map.put(Instant.class, new GeneratedUpdateJavaTime.InstantDT()); map.put(LocalDateTime.class, new GeneratedUpdateJavaTime.LocalDT()); map.put(OffsetDateTime.class, new GeneratedUpdateJavaTime.OffsetDT()); map.put(ZonedDateTime.class, new GeneratedUpdateJavaTime.ZonedDT()); diff --git a/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactoryTest.java b/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactoryTest.java index fc770d7a4b..e17e19d191 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactoryTest.java +++ b/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactoryTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import java.sql.Timestamp; +import java.time.Instant; import java.time.LocalDateTime; import java.time.OffsetDateTime; @@ -14,6 +15,16 @@ public class InsertTimestampFactoryTest { InsertTimestampFactory factory = new InsertTimestampFactory(new ClassLoadConfig()); + @Test + public void test_createdTimestamp_Instant() { + + DeployBeanProperty prop = new DeployBeanProperty(null, Instant.class, null, null); + + GeneratedProperty insertTimestamp = factory.createInsertTimestamp(prop); + Object value = insertTimestamp.getInsertValue(null, null, System.currentTimeMillis()); + assertTrue(value instanceof Instant); + } + @Test public void test_createdTimestamp_LocalDateTime() { diff --git a/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactoryTest.java b/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactoryTest.java index 12b5ca2d23..a2293efa77 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactoryTest.java +++ b/src/test/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactoryTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import java.sql.Timestamp; +import java.time.Instant; import java.time.LocalDateTime; import java.time.OffsetDateTime; @@ -15,6 +16,16 @@ public class UpdateTimestampFactoryTest { UpdateTimestampFactory factory = new UpdateTimestampFactory(new ClassLoadConfig()); + @Test + public void test_createdTimestamp_Instant() { + + DeployBeanProperty prop = new DeployBeanProperty(null, Instant.class, null, null); + + GeneratedProperty generatedProperty = factory.createUpdateTimestamp(prop); + Object value = generatedProperty.getInsertValue(null, null, System.currentTimeMillis()); + assertTrue(value instanceof Instant); + } + @Test public void test_createdTimestamp_LocalDateTime() { diff --git a/src/test/java/com/avaje/tests/generated/TestGeneratedProperties.java b/src/test/java/com/avaje/tests/generated/TestGeneratedProperties.java index f62a4c6412..4e696bda81 100644 --- a/src/test/java/com/avaje/tests/generated/TestGeneratedProperties.java +++ b/src/test/java/com/avaje/tests/generated/TestGeneratedProperties.java @@ -31,16 +31,19 @@ public void test_insert() { assertNotNull(bean.getZdtUpdated()); assertNotNull(bean.getLongCreated()); assertNotNull(bean.getLongUpdated()); + assertNotNull(bean.getInstantCreated()); + assertNotNull(bean.getInstantUpdated()); assertThat(bean.getWhenCreated().toInstant().toEpochMilli()).isEqualTo(bean.getLongCreated()); assertThat(bean.getWhenModified().toInstant().toEpochMilli()).isEqualTo(bean.getLongCreated()); - assertThat(bean.getWhenModified().toInstant().toEpochMilli()).isEqualTo(bean.getLongCreated()); bean.setName("updating..."); Ebean.save(bean); assertThat(bean.getWhenModified()).isNotEqualTo(bean.getLongCreated()); assertThat(bean.getWhenModified().toInstant().toEpochMilli()).isEqualTo(bean.getLongUpdated()); + assertThat(bean.getInstantUpdated().toEpochMilli()).isEqualTo(bean.getLongUpdated()); + assertThat(bean.getInstantCreated().toEpochMilli()).isEqualTo(bean.getLongCreated()); Ebean.delete(bean); } diff --git a/src/test/java/com/avaje/tests/model/EGenProps.java b/src/test/java/com/avaje/tests/model/EGenProps.java index f2b33b2a1b..b5387d45a0 100644 --- a/src/test/java/com/avaje/tests/model/EGenProps.java +++ b/src/test/java/com/avaje/tests/model/EGenProps.java @@ -9,6 +9,7 @@ import javax.persistence.Id; import javax.persistence.Version; import java.sql.Timestamp; +import java.time.Instant; import java.time.LocalDateTime; import java.time.OffsetDateTime; import java.time.ZonedDateTime; @@ -54,6 +55,12 @@ public class EGenProps { @UpdatedTimestamp ZonedDateTime zdtUpdated; + @CreatedTimestamp + Instant instantCreated; + + @UpdatedTimestamp + Instant instantUpdated; + @CreatedTimestamp long longCreated; @@ -179,4 +186,20 @@ public long getLongUpdated() { public void setLongUpdated(long longUpdated) { this.longUpdated = longUpdated; } + + public Instant getInstantCreated() { + return instantCreated; + } + + public void setInstantCreated(Instant instantCreated) { + this.instantCreated = instantCreated; + } + + public Instant getInstantUpdated() { + return instantUpdated; + } + + public void setInstantUpdated(Instant instantUpdated) { + this.instantUpdated = instantUpdated; + } }