Окружающая обстановка:
- Грааль 3.2.9
- GORM 6.1.2 для MongoDB 3.4.2
Это мой (упрощенный) доменный класс
class Cluster {
String name
String slug
static constraints = {
name blank: false, unique: true
slug blank: false, unique: true, validator: { return it == it.toLowerCase().replaceAll(/[^\w-]/, '') }
}
static mapping = {
collection 'Cluster'
id name: 'slug'
}
}
Как видите, я сопоставил свойство slug
с документом _id
.
Я могу успешно добавить документ с помощью
Cluster cluster = new Cluster(name: 'Dallas', slug: 'dal05')
cluster.insert(failOnError: true)
и все работает нормально. Но если я снова выполню ту же команду insert
, я получу исключение дублированного ключа:
com.mongodb.MongoBulkWriteException: Bulk write operation error on server localhost:27017. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error index: db.Cluster.$_id_ dup key: { : "dal05" }', details={ }}]
в то время как я ожидал бы простую ошибку проверки с указанием дублированного ключа.
Однако, несмотря на то, что ограничение unique
терпит неудачу, проверка корректно запускается для двух других (пустое значение или, например, «Dal05» — заглавные буквы не разрешены).
Без сопоставления идентификатора со свойством slug
, оставляя логику assigned
по умолчанию, все работает как положено.
Я что-то пропустил? Заранее спасибо!