-
Notifications
You must be signed in to change notification settings - Fork 199
Description
Original Reporter: ratler
Environment: Linux, Grails 1.3.7, Sun JDK 1.6.0_26
Version: 1.0.0.M6
Migrated From: http://jira.grails.org/browse/GPMONGODB-73
When using beforeUpdate() in a domain class that has an embedded hasMany relationship the following exception is thrown:
java.lang.IllegalArgumentException: can't serialize class blah.Address
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:214)
at org.bson.BSONEncoder.putIterable(BSONEncoder.java:239)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:182)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:124)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:70)
at com.mongodb.OutMessage.putObject(OutMessage.java:189)
at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:334)
at org.springframework.datastore.mapping.mongo.engine.MongoEntityPersister$5.doInDB(MongoEntityPersister.java:404)
at org.springframework.data.document.mongodb.MongoTemplate.execute(MongoTemplate.java:293)
at org.springframework.datastore.mapping.mongo.engine.MongoEntityPersister.updateEntry(MongoEntityPersister.java:391)
at org.springframework.datastore.mapping.mongo.engine.MongoEntityPersister.updateEntry(MongoEntityPersister.java:69)
at org.springframework.datastore.mapping.engine.NativeEntryEntityPersister$2.run(NativeEntryEntityPersister.java:428)
at org.springframework.datastore.mapping.core.impl.PendingOperationExecution.executePendingInsert(PendingOperationExecution.java:32)
at org.springframework.datastore.mapping.core.AbstractSession.flushPendingOperations(AbstractSession.java:235)
at org.springframework.datastore.mapping.core.AbstractSession.flushPendingUpdates(AbstractSession.java:212)
at org.springframework.datastore.mapping.core.AbstractSession.flush(AbstractSession.java:196)
at org.grails.datastore.gorm.support.DatastorePersistenceContextInterceptor.flush(DatastorePersistenceContextInterceptor.java:90)
at Console$_run_closure3_closure7_closure9.doCall(Console:83)
at Console$_run_closure3_closure7.doCall(Console:82)
at Console$_run_closure3_closure7.doCall(Console)
Domain classes used to reproduce the issue:
{code:title=User.groovy}
package blah
import org.bson.types.ObjectId
class User {
ObjectId id
String name
List
static embedded = ['addresses']
static hasMany = [addresses:Address]
static constraints = {
}
def beforeUpdate() {
this.name = name.toLowerCase()
}
}
{code}
{code:title=Address.groovy}
package blah
class Address {
String type
String identifier
static constraints = {
}
}
{code}
To reproduce the issue run this snippet twice in grails console
{code}
package blah
user = User.findByName("ratler")
if (!user) {
user = new User(name: "ratler")
}
address = new Address(address1:"Test")
user.addToAddresses(address)
user.save(flash: true)
{code}