Dan*_*ton 8 grails groovy grails-orm grails-domain-class grails-2.0
我有几个Grails的,其中包括2.1域类dateCreated
和lastUpdated
那格姆自动管理,如字段:
class Person {
Date dateCreated
Date lastUpdated
String name
}
Run Code Online (Sandbox Code Playgroud)
我希望 Grails在运行时自动填写这些字段,但我也想创建一些测试数据,我可以手动定义这些日期的值.问题是Grails会自动设置值,如果这些字段带有拦截器,即使我已经专门设置它们.
我已经看到了这个SO问题,它描述了如何允许更改dateCreated
,但我也需要改变lastUpdated
.这可能吗?
Dan*_*ton 16
哎呀,我的错误,另一个问题中的方法确实有效,但有问题的实体被分别保存在其他地方.你似乎还需要一个明确的flush
工作:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3768 次 |
最近记录: |