grails中的字符串ID - 如何完成?

sha*_*unc 4 grails groovy grails-orm

有人能告诉我清楚,完整,100%的工作方式将字符串类型的字段设置为grails中的ID吗?我已阅读文档,然后在网上阅读所有类似的咆哮,但未能创建一个工作原型.

这是我尝试让你相信我不只是懒得等待某人做这项工作的尝试之一)))

    class User {
  String login
  static hasMany = [apps : Application]

  static constraints = { 
  }

  static mapping = { 
    id generator: 'assigned', name: "login"
  }
Run Code Online (Sandbox Code Playgroud)

}

jam*_*man 8

当您使用自然ID时,您必须使用findBy方法而不是get方法,如此测试中所示:

def user = new User(login: "test")
assertNotNull user.save(flush: true)

user = User.findByLogin("test")
assertNotNull user
assertEquals "test", user.login
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用单个字段组合ID映射:

class User implements Serializable {
    String login

    static hasMany = [apps: Application]

    static constraints = {
    }

    static mapping = {
        id composite: ['login']
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,实现Serializable需要复合ID域类.

复合id的测试将是:

def user = new User(login: "test")
assertNotNull user.save(flush: true)

user = User.get(new User(login: "test"))
assertNotNull user
assertEquals "test", user.login
Run Code Online (Sandbox Code Playgroud)