私の間違いとして、他の質問のアプローチはうまくいきますが、問題のエンティティは別に別の場所に保存されていました。また、あなたは物事を動作させるために、明示的な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)
}
}
他の方法を試しましたか?私はそれがうまくいかなかったと思いますか? –
@tim_yatesという質問にリンクされたメソッドを使用すると、 'dateCreated'フィールドを手動で設定できますが、' lastUpdated'フィールドは手動で設定することができません。 –
テストしましたか?すべてのタイムスタンプを無効にするように見えるので、lastUpdatedが含まれています。 –