diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java index e93f7d1ce..d0a6a343b 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java @@ -994,6 +994,32 @@ public class BeanDescriptor implements MetaBeanInfo { return deleteRecurseSkippable; } + /** + * Find a property annotated with @WhenCreated or @CreatedTimestamp. + */ + public BeanProperty findWhenCreatedProperty() { + + for (int i = 0; i < propertiesBaseScalar.length; i++) { + if (propertiesBaseScalar[i].isGeneratedWhenCreated()) { + return propertiesBaseScalar[i]; + } + } + return null; + } + + /** + * Find a property annotated with @WhenModified or @UpdatedTimestamp. + */ + public BeanProperty findWhenModifiedProperty() { + + for (int i = 0; i < propertiesBaseScalar.length; i++) { + if (propertiesBaseScalar[i].isGeneratedWhenModified()) { + return propertiesBaseScalar[i]; + } + } + return null; + } + /** * Return the many property included in the query or null if one is not. */ diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java index 9204a0613..f763f8593 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java @@ -7,6 +7,8 @@ import com.avaje.ebean.config.dbplatform.DbType; import com.avaje.ebean.text.StringParser; import com.avaje.ebeaninternal.server.core.InternString; import com.avaje.ebeaninternal.server.deploy.generatedproperty.GeneratedProperty; +import com.avaje.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenCreated; +import com.avaje.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenModified; import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanProperty; import com.avaje.ebeaninternal.server.el.ElPropertyChainBuilder; import com.avaje.ebeaninternal.server.el.ElPropertyValue; @@ -864,6 +866,20 @@ public class BeanProperty implements ElPropertyValue { return isVersion() || (generatedProperty != null && generatedProperty.isDDLNotNullable()); } + /** + * Return true if this is a generated property mapping to @WhenCreated or @CreatedTimestamp. + */ + public boolean isGeneratedWhenCreated() { + return generatedProperty instanceof GeneratedWhenCreated; + } + + /** + * Return true if this is a generated property mapping to @WhenModified or @UpdatedTimestamp. + */ + public boolean isGeneratedWhenModified() { + return generatedProperty instanceof GeneratedWhenModified; + } + /** * Return true if the DB column should be unique. */ 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 97c1bf8aa..5b5c56fa8 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 @@ -12,7 +12,7 @@ import java.time.ZonedDateTime; */ public class GeneratedInsertJavaTime { - public static abstract class Base implements GeneratedProperty { + public static abstract class Base implements GeneratedProperty, GeneratedWhenCreated { @Override public boolean includeInUpdate() { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java index bf8abdfb8..ffc7963ec 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java @@ -11,7 +11,7 @@ import org.joda.time.DateTime; */ public class GeneratedInsertJodaTime { - public static abstract class Base implements GeneratedProperty { + public static abstract class Base implements GeneratedProperty, GeneratedWhenCreated { @Override public boolean includeInUpdate() { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java index 27daf7b1c..eff2d5ffd 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java @@ -8,7 +8,7 @@ import com.avaje.ebeaninternal.server.deploy.BeanProperty; /** * Used to generate a timestamp when a bean is inserted. */ -public class GeneratedInsertTimestamp implements GeneratedProperty { +public class GeneratedInsertTimestamp implements GeneratedProperty, GeneratedWhenCreated { /** * Return the current time as a Timestamp. 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 08909c245..953402dfd 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 @@ -12,7 +12,7 @@ import java.time.ZonedDateTime; */ public class GeneratedUpdateJavaTime { - public static abstract class Base implements GeneratedProperty { + public static abstract class Base implements GeneratedProperty, GeneratedWhenModified { @Override public boolean includeInUpdate() { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java index 9f6ca121f..7e3ca60b8 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java @@ -11,7 +11,7 @@ import org.joda.time.DateTime; */ public class GeneratedUpdateJodaTime { - public static abstract class Base implements GeneratedProperty { + public static abstract class Base implements GeneratedProperty, GeneratedWhenModified { @Override public boolean includeInUpdate() { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java index e20857233..747890502 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java @@ -8,7 +8,7 @@ import com.avaje.ebeaninternal.server.deploy.BeanProperty; /** * Generate a Timestamp whenever the bean is inserted or updated. */ -public class GeneratedUpdateTimestamp implements GeneratedProperty { +public class GeneratedUpdateTimestamp implements GeneratedProperty, GeneratedWhenModified { /** * Return now as a Timestamp. diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedWhenCreated.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedWhenCreated.java new file mode 100644 index 000000000..a669b31f2 --- /dev/null +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedWhenCreated.java @@ -0,0 +1,7 @@ +package com.avaje.ebeaninternal.server.deploy.generatedproperty; + +/** + * Marker interface for all implementations mapping to @WhenCreated or @CreatedTimestamp. + */ +public interface GeneratedWhenCreated { +} diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedWhenModified.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedWhenModified.java new file mode 100644 index 000000000..73f8d20e4 --- /dev/null +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/generatedproperty/GeneratedWhenModified.java @@ -0,0 +1,7 @@ +package com.avaje.ebeaninternal.server.deploy.generatedproperty; + +/** + * Marker interface for all implementations mapping to @WhenModified or @UpdatedTimestamp. + */ +public interface GeneratedWhenModified { +} diff --git a/src/test/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java b/src/test/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java new file mode 100644 index 000000000..01ba7417b --- /dev/null +++ b/src/test/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor_whenCreatedPropertyTest.java @@ -0,0 +1,35 @@ +package com.avaje.ebeaninternal.server.deploy; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.ebeaninternal.api.SpiEbeanServer; +import com.avaje.tests.model.basic.Customer; +import com.avaje.tests.model.basic.EBasic; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + + +public class BeanDescriptor_whenCreatedPropertyTest extends BaseTestCase { + + + @Test + public void test() { + + SpiEbeanServer server = (SpiEbeanServer)Ebean.getDefaultServer(); + + BeanDescriptor desc = server.getBeanDescriptor(Customer.class); + + BeanProperty whenCreatedProperty = desc.findWhenCreatedProperty(); + assertEquals("cretime",whenCreatedProperty.getDbColumn()); + + BeanProperty whenModifiedProperty = desc.findWhenModifiedProperty(); + assertEquals("updtime",whenModifiedProperty.getDbColumn()); + + + BeanDescriptor eBasicDesc = server.getBeanDescriptor(EBasic.class); + assertNull(eBasicDesc.findWhenCreatedProperty()); + assertNull(eBasicDesc.findWhenModifiedProperty()); + } +} \ No newline at end of file