grails中的字符串ID-具体如何实现?
有人能告诉我在grails中将字符串类型字段设置为ID的清晰、完整、100%的工作方式吗?我读过这些文档,然后在网上读过所有类似的咆哮,但未能创建一个工作原型 下面是我的一次尝试,让你相信我不是在懒洋洋地等待别人来做这项工作grails中的字符串ID-具体如何实现?,grails,groovy,gorm,Grails,Groovy,Gorm,有人能告诉我在grails中将字符串类型字段设置为ID的清晰、完整、100%的工作方式吗?我读过这些文档,然后在网上读过所有类似的咆哮,但未能创建一个工作原型 下面是我的一次尝试,让你相信我不是在懒洋洋地等待别人来做这项工作 }当您使用自然id时,您必须使用该方法,而不是本测试中演示的方法: def user = new User(login: "test") assertNotNull user.save(flush: true) user = User.findByLogin("test"
}当您使用自然id时,您必须使用该方法,而不是本测试中演示的方法:
def user = new User(login: "test")
assertNotNull user.save(flush: true)
user = User.findByLogin("test")
assertNotNull user
assertEquals "test", user.login
或者,您可以使用单个字段映射:
请注意,域类是实现Serializable所必需的
这项测试将是:
def user = new User(login: "test")
assertNotNull user.save(flush: true)
user = User.get(new User(login: "test"))
assertNotNull user
assertEquals "test", user.login
我假设您正在谈论将字符串主键(通常是自然键)映射到grails域对象中的主键 此答案来源于以下信息: 在这里: 例如,您有一个使用以下架构定义的表用户:
username varchar(40) not null pimary key,
firstname varchar(40) not null,
lastname varchar(40) not null
要在grails中实现这一点,您必须稍微调整一下定义
首先,必须将id映射到数据库中的给定列。使用“已分配”的生成器
然后,为了可用性,您可能需要添加临时字段username,以便可以使用user.username=。否则,我相信您必须使用id访问字段。
此瞬态属性的getter和setter设置适当的“id”字段,该字段反过来更新数据库
class User {
String id
String password
String fullName
static transients = ['username']
static constraints = {
id(unique:true,blank:false)
password(nullable:true,maxSize:20)
fullName(nullable:true,maxSize:20)
}
static mapping = {
table 'users'
id column: 'username', generator: 'assigned'
version false
}
//
void setUsername(String username) {
id = username
}
String getUsername() {
return id
}
}
注意:Scaffolding无法识别瞬态字段,因此如果您想让代码更接近数据库的模型,您必须使用生成的控制器/视图。您所说的“字段作为登录名”是什么意思?您尝试了什么?您有什么具体问题?@splix,ad ID当然,固定类型,谢谢您的提及。@splix,编辑了问题,添加示例谢谢!我看你很了解圣杯。您能解释一下,为什么在这种情况下通过错误使用域类的exists方法吗?
username varchar(40) not null pimary key,
firstname varchar(40) not null,
lastname varchar(40) not null
class User {
String id
String password
String fullName
static transients = ['username']
static constraints = {
id(unique:true,blank:false)
password(nullable:true,maxSize:20)
fullName(nullable:true,maxSize:20)
}
static mapping = {
table 'users'
id column: 'username', generator: 'assigned'
version false
}
//
void setUsername(String username) {
id = username
}
String getUsername() {
return id
}
}