这个问题与Grails 2.1.1有关。我有一个域对象,其中包含在 Controller 中设置的3个日期字段。我有一个错误,其中忽略了 Controller 中设置的日期,并将替换为当前日期

奇怪的是,只有当我将域对象中的相应字段重命名为具有“date”后缀时,此行为才得以解决。

我想知道:

  • (如果需要遵循特定的命名约定,则为
  • )
  • 或是否存在我不了解的其他基础问题(我知道在引擎盖下会发生很多grails的“魔术”,坦率地说,我不太满意)

    下面提供了分析和代码示例:

    原始域对象和 Controller -在这种情况下,为“dateCreated”和“lastUpdated”设置的值将被系统日期忽略并覆盖。
    class User {
    
    String name
    String title
    String firstName
    String lastName
    Date companyCreationDate
    
    Date dateCreated //works when renamed to createdDate (and controller updated accordingly)
    Date lastUpdated //works when renamed to lastUpdatedDate (and controller updated accordingly)
    
    static mapping = {
        id column:'record_id'
    }
    
    static constraints = {
        id()
        title(blank: false, maxSize: 35)
        firstName(blank: false, minSize: 1, maxSize: 35)
        lastName(blank: false, minSize: 1, maxSize: 35)
    }
    

    }

    类UserController {
    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
    static df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
    
    def save() {
        def user = new User()
        user.name = params.name
    
        user.companyCreationDate = df.parse("2006-09-07 13:26:15");
        user.title = params._title
        user.firstName = params._fname
        user.lastName = params._lName
    
        user.creationDate = df.parse("2006-09-07 00:00:00");
        user.lastUpdatedDate = df.parse("2006-09-07 00:00:00");
    
        if (user.validate()){
            user.clearErrors();
    
            if (user.save(flush: true)) {
                flash.message = message(code: 'default.created.message', args: [message(code: 'registration.label', default: 'Registration'), user.id])
                redirect(action: "show", id: user.id)
            }
        }
        else
        {
            render(view: "create", model: [userInstance: user])
        }
    

    在Hibernate中设置跟踪选项后,我注意到在保存域对象(即调用“save(flush:true)”)与Hibernate执行持久性操作之间发生了这种转换。

    最佳答案

    您可以通过将autoTimestamp设置为false来禁用此功能:Grails Doc

    关于hibernate - 日期字段的Grails GORM域对象命名约定和持久性后果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19244561/

  • 10-11 12:39