Изменение идентификатора первичного ключа для типа String в Grails
В приложении My Grails 2.0 определен объект домена пользователя:
class User {
static mapping = {
table "dt_user"
columns {
id column:'user_id', generator:'assigned', type:'string'
}
}
Когда я пытаюсь сохранить нового пользователя в моем файле BootStrap следующим образом:
def user = new User(id: "smith").save(failOnError:true)
Я получаю следующую ошибку:
| Error 2012-01-13 10:09:42,659 [main] ERROR property.BasicPropertyAccessor - IllegalArgumentException in class: User, setter method of property: id
| Error 2012-01-13 10:09:42,660 [main] ERROR property.BasicPropertyAccessor - expected type: java.lang.Long, actual value: java.lang.String
Я также попытался изменить класс User на это:
class User {
static mapping = {
table "dt_user"
columns {
id column:'user_id', generator:'assigned', type:'string', name:'id'
}
}
String id
}
из-за чего указанные ошибки исчезли. Однако я обнаружил, что это привело к тому, что идентификаторы генерировались автоматически, полностью игнорируя предложение generator: 'assigned'
.
Что я здесь делаю неправильно?
Ответы
Ответ 1
Похоже, что завершение его в блоке columns
является виновником. Возможно, это было необходимо в какой-то момент (до моего времени), но это было необязательно, если я использовал Grails и, по-видимому, теперь сломан. Но вы можете просто объявить сопоставления столбцов напрямую:
class User {
String id
static mapping = {
table "dt_user"
id column: 'user_id', generator: 'assigned'
}
}
Пока поле объявляется как строка и оно настроено как assigned
, оно будет работать; нет необходимости указывать GORM это String, это может понять это.