我使用字符串“username”作为表的主键,
但是,当保存并获取具有用户名ID的列时,我希望忽略这种情况,以使新用户无法尝试模拟其他用户。
,例如注册新用户时
获取唯一的用户名后,无论如何都可以键入它,并且仍然可以获取。
YouTube会使用他们的用户名来执行此操作。
,例如
域类
这使用用户名作为主键
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/