Grails 3.0.9没有使用MongoDB更新对象

时间:2015-12-23 11:50:41

标签: mongodb grails gorm gorm-mongodb grails-3.0.9

我在更新域类时遇到了问题。我正在使用Grails 3.0.9和MongoDB(适用于Gorm 5.0.0.RC1)

在我的build.gradle中:

compile "org.grails.plugins:mongodb:5.0.0.RC1"
compile "org.mongodb:mongodb-driver:3.0.2"
compile "org.grails:grails-datastore-gorm-mongodb:5.0.0.RC1"
runtime 'org.springframework.data:spring-data-mongodb:1.8.1.RELEASE'
compile("org.grails:gorm-mongodb-spring-boot:5.0.0.RC1")

测试:

@Integration
class CompanyControllerIntegrationSpec extends Specification{
def grailsApplication

Company company
RestBuilder rest

def setupData() {
    company = Company.buildWithoutSave().save(flush: true, failOnError: true) 

}

def setup(){
    rest = new RestBuilder()
} 


def "test update a company" (){
    def company2
    given:
        setupData()
        def id = company.id
    when:
        RestResponse response = rest.put("http://localhost:${grailsApplication.config.server.port}/${company.companyKey}/company") {
            json {
                name = "newName"
                description = "new Description"
            }
        }
        company2 = Company.findById(id)
    then:
        response.status == 200
        response.json.name == "newName"
        company2.name == "newName"
        company2.description == "new Description"
}
def cleanup() {
   Company.collection.remove(new BasicDBObject())
}

}}

控制器:

class CompanyController extends ExceptionController{

static allowedMethods = ['update':'PUT','show':'GET',
    'updateNew':'PUT','showNew':'GET']

CompanyService companyService

def update(String companyKey){

    def object = request.JSON?request.JSON:params
    Company companyOut = companyService.update(object, companyKey)

    render text:companyOut as JSON, status:HttpStatus.OK
}
}

服务:

class CompanyService {

def securityService
def grailsApplication

public Company update(object, String companyKey) throws ForbiddenException, InvalidRequestException, NotFoundException{
    Company company = findByKey(companyKey)
    if (object.name!=null)
        company.name = object.name
    if (object.description!=null)
        company.description = object.description
    if (object.enterprise!=null)
        company.enterprise = object.enterprise
    if (object.genKey!=null)
        company.companyKey = UUID.randomUUID().toString()

    if (!company.save(flush:true)){
        println company.errors
        throw new InvalidRequestException("Some parameters are missing or are invalid: "+company.errors.fieldErrors.field)
    }

    return company
}
public Company findByKey(String companyKey) throws NotFoundException, ForbiddenException {
    if (!companyKey){
        throw new ForbiddenException("The company key has not been given")
    }
    Company company = Company.findByCompanyKey(companyKey)
    if (!company){
        throw new NotFoundException("No company exists for the given key")
    }
    return company
}
}

测试结果如下:
- response.status是200
- response.json.name是“newName”
- company.name是旧名称(“公司1”)

如果我不进行清理,数据库仍然具有旧值。我已经遵循了save方法,也在Mongo gorm类中,我发现一个问题是字段没有标记为脏,但不知道为什么。 对于与此类似的其他Domain类,更新完成没有问题,并且属性被标记为脏。

0 个答案:

没有答案