Grails 3 и GORM 6 для MongoDB — ошибка дублированного ключа

Окружающая обстановка:

  • Грааль 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 по умолчанию, все работает как положено.

Я что-то пропустил? Заранее спасибо!


person ilPittiz    schedule 16.05.2017    source источник


Ответы (1)


Похоже, что на самом деле это ошибка, которую планируется исправить в следующем выпуске GORM 6.1.5.

Ссылка проблема: https://github.com/grails/grails-data-mapping/issues/951

person ilPittiz    schedule 06.06.2017