Search code examples
mongodbgrailsgrails-ormgorm-mongodb

grails, mongodb gorm, null embedded objects


I have this two simple domain classes:

class Isa95EquipmentSpecification {

    String equipmentClass
    String equipment
    String description
    Float quantity
    String quantityUOM
    List<Isa95EquipmentSpecificationProperty> equipmentSpecificationProperties

    static embedded = ['equipmentSpecificationProperties']

    static constraints = {
        equipment nullable: true, validator: {val, obj -> if (null == val && null ==    obj.equipmentClass) return ['bothNullable']}
        equipmentClass nullable: true, validator: {val, obj -> if (null == val && null == obj.equipment) return ['bothNullable']}
        description nullable: true
        quantity nullable: true
        quantityUOM nullable: true  
    }
}

and the child domain:

class Isa95EquipmentSpecificationProperty {
    String name
    String description
    String value
    String valueUOM
    Double quantity
    String quantityUOM

    static constraints = {
        name nullable: false
        description nullable: true
        value nullable: false
        valueUOM nullable: false
        quantity nullable: true
        quantityUOM nullable: true
    }
}

I expect that building up a composed document whit embedded properties I can save it running just a save() operation on the parent but it doesn't work.

I try to run on the grails console:

    def prop1 = new isa95.productdefinition.Isa95EquipmentSpecificationProperty(name: 'prop-1', value: 'mad', valueUOM: '-')
def prop2 = new isa95.productdefinition.Isa95EquipmentSpecificationProperty(name: 'prop-2', value: 12.32, valueUOM: 'kilograms')
def spec = new isa95.productdefinition.Isa95EquipmentSpecification(equipment: '41500', description: 'eq-test', equipmentSpecificationProperties: [prop1, prop2])
spec.save(failOnError: true)

The script run correctly but in the db I found this. I expected to find equipmentSpecificationProperies populated with nested list:

{ "_id" : NumberLong(9), "description" : "eq-test", "equipment" : "14500", "equipmentSpecificationProperties" : [ null, null ], "version" : 0 }

Solution

  • specify the list type:

    List<Isa95EquipmentSpecificationProperty> equipmentSpecificationProperties