outside - ¿Anular Grails dateCreated y lastUpdated solo para datos de prueba?
grails rest mapping (2)
Vaya, mi error, el enfoque en la otra pregunta funciona, pero la entidad en cuestión se guardaba por separado en otro lugar. También parece que necesitas un flush
explícito para que las cosas funcionen:
def withAutoTimestampSuppression(entity, closure) {
toggleAutoTimestamp(entity, false)
def result = closure()
toggleAutoTimestamp(entity, true)
result
}
def toggleAutoTimestamp(target, enabled) {
def applicationContext = (ServletContextHolder.getServletContext()
.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT))
def closureInterceptor = applicationContext.getBean("eventTriggeringInterceptor")
def datastore = closureInterceptor.datastores.values().iterator().next()
def interceptor = datastore.getEventTriggeringInterceptor()
def listener = interceptor.findEventListener(target)
listener.shouldTimestamp = enabled
null
}
def createTestPerson() {
def luke = new Person(name: "Luke Skywalker")
withAutoTimestampSuppression(luke) {
def lastWeek = new Date().minus(7)
luke.dateCreated = lastWeek
luke.lastUpdated = lastWeek
luke.save(failOnError: true, flush: true)
}
}
Tengo varias clases de dominio de Grails 2.1 que incluyen campos dateCreated
y lastUpdated
que GORM administra automáticamente, por ejemplo:
class Person {
Date dateCreated
Date lastUpdated
String name
}
Quiero que Grails llene automáticamente estos campos en tiempo de ejecución, pero también quiero crear algunos datos de prueba donde pueda definir manualmente los valores de estas fechas. El problema es que Grails establece automáticamente los valores de estos campos con un interceptor, incluso cuando los he configurado específicamente.
He visto esta pregunta SO, que describe cómo permitir cambios a dateCreated
, pero también necesito cambiar lastUpdated
. es posible?
Si se trata de una prueba de integración, puede usar una declaración de actualización hql para establecer manualmente lastUpdated.