環境:
- グレイルズ 3.2.9
- MongoDB 3.4.2 用の GORM 6.1.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
制約は失敗しますが、他の 2 つの検証は正しくトリガーされます (空の値、または 'Dal05' -大文字は許可されていません)。
プロパティにid をマッピングしないslug
ため、デフォルトのassigned
ロジックをそのままにして、すべてが期待どおりに機能します。
何か不足していますか?前もって感謝します!