grails - Grails:将字符串(用户名)用作主键,但是使用ignorecase保存并获取ID字符串(用户名)吗?

标签 grails groovy primary-key unique username

我使用字符串“username”作为表的主键,

但是,当保存并获取具有用户名ID的列时,我希望忽略这种情况,以使新用户无法尝试模拟其他用户。

,例如注册新用户时

  • 用户名=达克森
  • 用户名= DaXoN //不应使用

  • 获取唯一的用户名后,无论如何都可以键入它,并且仍然可以获取。
    YouTube会使用他们的用户名来执行此操作。

    ,例如
  • youtube.com/user/Daxon
  • youtube.com/user/DaXoN //仍应转到“Daxon”的相同配置文件

  • 域类
    这使用用户名作为主键
    class User {
      String username
      String password
    
      static constraints = {
      }
    
      static mapping = {
        id generator: 'assigned', name: "username", type: 'string'
      }
    }
    

    然后,我搭建了 Controller 和 View ,
    所以有人可以帮助我保存和获取忽略大小写的唯一用户名吗?

    最佳答案

    可以防止第二个用户注册仅在大小写不同时使用的名称的一种方法是在数据库层的用户名上创建不区分大小写的唯一索引。如果您尝试保存一个与现有名称不区分大小写的名称,则会出现数据库异常。这是mysql的默认设置,但对于其他数据库,应执行以下操作:

    create unique index username_csunique_idx on user(lower(username));
    

    我不知道在域类DSL中指定这种索引的任何方法。

    要查找对象,请不区分大小写地按用户名查询。例如,User.findByUsernameIlike(userName)User.find("from User as u where lower(u.username) = ?", [userName.toLowerCase()])(如果您更喜欢HQL)。

    关于grails - Grails:将字符串(用户名)用作主键,但是使用ignorecase保存并获取ID字符串(用户名)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1722833/

    相关文章:

    java - 正则表达式匹配特定单词并忽略特定文本

    java - 在 Java 中生成唯一键以用作 Oracle 表中的主键

    mysql - 删除后重置数据库记录 ID

    MySQL非主外键

    grails - Grails包含自定义脚本

    java - 使用 x-csrf-token 身份验证连接到 REST Web 服务时出错

    grails - 将Grails应用程序部署到OpenShift的内存量

    groovy - 以编程方式验证对 Google Cloud Functions 的调用

    jquery - 如何在Grails上使用jQuery脚本?

    grails - 基本确认时的rabbitMQ AlreadyClosedException(知识)