Skip to content

Commit d16d644

Browse files
committed
Allow disabling of AutoTimestamp on insertion events if values already set. Useful if importing data.
1 parent d2091da commit d16d644

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/events/AutoTimestampEventListener.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.grails.datastore.mapping.model.MappingContext;
3535
import org.grails.datastore.mapping.model.PersistentEntity;
3636
import org.grails.datastore.mapping.model.PersistentProperty;
37+
import org.springframework.beans.factory.annotation.Value;
3738
import org.springframework.context.ApplicationEvent;
3839

3940
/**
@@ -44,6 +45,10 @@
4445
*/
4546
public class AutoTimestampEventListener extends AbstractPersistenceEventListener implements MappingContext.Listener {
4647

48+
// if false, will not set timestamp on insert event if value is not null
49+
@Value("${grails.gorm.events.insertOverwrite:true}")
50+
boolean insertOverwrite = true;
51+
4752
public static final String DATE_CREATED_PROPERTY = "dateCreated";
4853
public static final String LAST_UPDATED_PROPERTY = "lastUpdated";
4954

@@ -98,19 +103,23 @@ public boolean beforeInsert(PersistentEntity entity, EntityAccess ea) {
98103
Set<String> props = getDateCreatedPropertyNames(name);
99104
if (props != null) {
100105
for (String prop : props) {
101-
dateCreatedType = ea.getPropertyType(prop);
102-
timestamp = timestampProvider.createTimestamp(dateCreatedType);
103-
ea.setProperty(prop, timestamp);
106+
if (insertOverwrite || ea.getPropertyValue(prop) == null) {
107+
dateCreatedType = ea.getPropertyType(prop);
108+
timestamp = timestampProvider.createTimestamp(dateCreatedType);
109+
ea.setProperty(prop, timestamp);
110+
}
104111
}
105112
}
106113
props = getLastUpdatedPropertyNames(name);
107114
if (props != null) {
108115
for (String prop : props) {
109-
Class<?> lastUpdateType = ea.getPropertyType(prop);
110-
if (dateCreatedType == null || !lastUpdateType.isAssignableFrom(dateCreatedType)) {
111-
timestamp = timestampProvider.createTimestamp(lastUpdateType);
116+
if (insertOverwrite || ea.getPropertyValue(prop) == null) {
117+
Class<?> lastUpdateType = ea.getPropertyType(prop);
118+
if (dateCreatedType == null || !lastUpdateType.isAssignableFrom(dateCreatedType)) {
119+
timestamp = timestampProvider.createTimestamp(lastUpdateType);
120+
}
121+
ea.setProperty(prop, timestamp);
112122
}
113-
ea.setProperty(prop, timestamp);
114123
}
115124
}
116125
return true;

0 commit comments

Comments
 (0)