-
Notifications
You must be signed in to change notification settings - Fork 196
Closed
Labels
Milestone
Description
*Grails 3.1.0.RC1
*org.grails.plugins:mongodb:5.0.0.RC3
Example Domain:
class Product {
static mapWith = "mongo"
String id
String name
Map characteristics
static embedded = ['characteristics']
}I am using a Restful API for DELETE for Product.
On delete() below stacktrace is seen.
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.grails.datastore.mapping.dirty.checking.DirtyCheckingMap@19284357' with class 'org.grails.datastore.mapping.dirty.checking.DirtyCheckingMap' to class 'java.lang.Iterable' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.lang.Iterable(org.grails.datastore.mapping.dirty.checking.DirtyCheckingMap)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:403) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:319) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:603) ~[groovy-2.4.5.jar:2.4.5]
at org.grails.datastore.mapping.mongo.engine.MongoCodecEntityPersister.deleteEntity(MongoCodecEntityPersister.groovy:483) ~[grails-datastore-gorm-mongodb-5.0.0.RC2.jar:na]
at org.grails.datastore.mapping.engine.EntityPersister.delete(EntityPersister.java:262) ~[grails-datastore-core-5.0.0.RC2.jar:na]
at org.grails.datastore.mapping.core.AbstractSession.delete(AbstractSession.java:727) ~[grails-datastore-core-5.0.0.RC2.jar:na]
at org.grails.datastore.gorm.GormInstanceApi$_delete_closure9.doCall(GormInstanceApi.groovy:262) ~[grails-datastore-gorm-5.0.0.RC2.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_66]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_66]
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) ~[groovy-2.4.5.jar:2.4.5]
Main class to look at is MongoCodecEntityPersister.groovy:484
if(v != null) {
mongoSession.delete( (Iterable) v )
}In case of a Map property v would be DirtyCheckingMap which implements Map interface which in fact is not Iterable, therefore the exception.
Fix:
A simple fix would be in MongoCodecEntityPersister as:
if(v != null) {
mongoSession.delete( v in DirtyCheckingMap ? v : (Iterable) v )
}