Я предполагаю, что вы говорите о сопоставлении первичного ключа String (обычно естественного ключа) с первичным ключом в доменном объекте grails.
Этот ответ получен из информации, найденной здесь:
http://dsommerville.blogspot.com/2009/09/mapping-natural-keys-using-gorm.html
и здесь:
http://gr8fanboy.wordpress.com/2010/04/08/adding-a-natural-key-to-a-database-table-using-straight-gorm/
Например, у вас есть таблица Users, определенная по следующей схеме:
username varchar(40) not null pimary key,
firstname varchar(40) not null,
lastname varchar(40) not null
Чтобы сделать это в Граале, вам нужно немного помассировать определение.
Сначала вы должны сопоставить идентификатор с данным столбцом в вашей базе данных. С генератором "назначено"
Затем для удобства использования вы можете добавить временное поле username, чтобы вы могли использовать user.username =. В противном случае, я считаю, что вы должны получить доступ к полю, используя идентификатор.
Получатель и установщик для этого переходного свойства устанавливают соответствующее поле «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 не распознает переходное поле, поэтому вам придется работать с сгенерированными контроллерами / представлениями, если вы хотите, чтобы ваш код более точно моделировал вашу базу данных.