Grails上次登录字段未更新

Grails上次登录字段未更新,grails,groovy,Grails,Groovy,这是我的实体类和登录代码。我的上一次登录在db中保持空,没有引发异常。我尝试记录hibernate sql语句。似乎update语句没有执行 实体: class Users { static hasMany = [farm:Farms,report:Reports,reportMessage:ReportMessages,notifications:Notifications] String userName String Password Date lastLogin

这是我的实体类和登录代码。我的上一次登录在db中保持空,没有引发异常。我尝试记录hibernate sql语句。似乎update语句没有执行

实体:

class Users {
  static hasMany = [farm:Farms,report:Reports,reportMessage:ReportMessages,notifications:Notifications]

  String userName 
  String Password
  Date lastLogin
  String userImage

  static constraints = {
    userName (blank:false, unique:true)
    Password (blank:false)
    userImage (blank:false)
    lastLogin (nullable:true, blank:true)
  }
}
登录码

def login(user)
{
    def status = false;        
    Users u = user;
    Users users = Users.findByUserName(u.userName)
    PasswordCodec pwd = new PasswordCodec();
    u.Password = pwd.encode(u.Password)
    if (users !=null && u.Password.equals(users.Password))
    {
        u.lastLogin = new Date()
        u.save()
        status = true
    }
}

看起来您正在将
lastLogin
日期分配给随请求传递的命令对象。存储的域对象似乎未更新:

u.lastLogin = new Date()
u.save()
应该由

users.lastLogin = new Date()
users.save()

希望对您有所帮助。

看起来您正在为请求传递的命令对象分配
lastLogin
日期。存储的域对象似乎未更新:

u.lastLogin = new Date()
u.save()
应该由

users.lastLogin = new Date()
users.save()

希望这能有所帮助。

Tim说得对-类和变量名非常分散注意力。域名类名称应为单数。如果坚持使用Rails中愚蠢的复数表名约定,可以在映射块中配置:

class User {
   ...
   static mapping = {
      table 'users'
   }
}
Users
实例使用局部复数变量也会造成混淆-
Users=…
会产生误导,因为这意味着
Users
可能是多个实例的集合


我建议您停止这么辛苦的工作,使用SpringSecurityCore或Shiro。滚动您自己的安全性是有风险的,需要花费时间来实现站点的真正功能。

Tim说得对-类和变量名非常分散注意力。域名类名称应为单数。如果坚持使用Rails中愚蠢的复数表名约定,可以在映射块中配置:

class User {
   ...
   static mapping = {
      table 'users'
   }
}
Users
实例使用局部复数变量也会造成混淆-
Users=…
会产生误导,因为这意味着
Users
可能是多个实例的集合


我建议您停止这么辛苦的工作,使用SpringSecurityCore或Shiro。滚动您自己的安全性是有风险的,并且需要花费时间来实现站点的真正功能。

u.save()
替换为
u.save(flush:true,failOnError:true)
并查看这是否会引发错误。这对grails没有影响!如果传入的
用户
是从数据库中获取的域对象,那么是的,我同意这不会有什么区别。您的代码不起作用,我的建议是我将如何识别问题。尝试删除除日期和保存设置之外的所有代码。接下来,我将查看映射和数据库表,以确保它们设置正确(我假设它们是正确的,因为您没有收到错误,但这是一个可以查看的地方)。尝试将lastLogin上的约束更改为“nullable:true”,将
u.save()替换为
u.save()
(flush:true,failOnError:true)
并查看这是否会引发错误。这不会在grails中造成差异!如果传入的
用户
是从数据库中获取的域对象,那么是的,我同意这不会有什么区别。您的代码不起作用,我的建议是我将如何识别问题。尝试删除除日期和保存设置之外的所有代码。接下来,我将查看映射和数据库表,以确保它们设置正确(我假设它们是正确的,因为您没有收到错误,但这是一个可以查看的地方)。尝试将lastLogin上的约束更改为“nullable:true”+1:-)在一系列名称不正确的变量和属性中很好地发现+1:-)在一个名称不正确的变量和属性的森林中被很好地发现了!