Как обновить запись, используя приложение Grails, которое вставлено веб-сервисом rest (org.springframework.data.mongodb.core.MongoOperations)? - PullRequest
0 голосов
/ 08 октября 2018

Для моего проекта я создал один веб-сервис, который вставляет только записи в базу данных (Mongodb), затем у меня есть одно веб-приложение, использующее grails 3.3.5 с поддержкой плагинов org.grails.plugins: mongodb, в котором можно просматриватьи обновите записи.

Код для вставки записи следующим образом ...

public synchronized void insertPersonDetails(Person person){
    try {
        mongoOperations = DBManager.getConnection();
        try {
            mongoOperations.insert(person, "person");
        } catch (Exception e) {
            log.error(e,e);
        }
    }catch (Exception e){
        log.error(e,e);
    }
}

Person.java (в веб-сервисе)

@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {
    @Id
    private String id;
    @Version
    private Long versionId;
    private String name;
    private String imagePath;
    private Boolean deleted = false;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Long getVersionId() {
        return versionId;
    }

    public void setVersionId(Long versionId) {
        this.versionId = versionId;
    }

    public String getImagePath() {
        return imagePath;
    }

    public void setImagePath(String imagePath) {
        this.imagePath = imagePath;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getDeleted() {
        return deleted;
    }

    public void setDeleted(Boolean deleted) {
        this.deleted = deleted;
    }
}

Запись успешно вставлена ​​в базу данных.

MongoDB Enterprise > db.person.find().pretty()
{
    "_id" : ObjectId("5bbaf0a61a6ff52720bb107d"),
    "versionId" : NumberLong(0),
    "name" : "Vivek",
    "imagePath" : "1.jpg",
    "deleted" : false,
    "_class" : "com.myApp.domain.Person"
}

Теперь я пытаюсь обновить ту же запись с помощью моего веб-приложения (Grails).

def updatePersonDetails(){
    Boolean result = false
    def personInstance = Person.get(new ObjectId(params?.id))

    personInstance.setDeleted(true)

    try{
        personInstance.save(flush:true)
        result = true
    }catch (Exception e){
        e.printStackTrace()
    }

    render result
    return
}

Домен моего веб-приложения Person.groovy

class Person {

    ObjectId id
    Long versionId
    String name
    String imagePath
    Boolean deleted = false

    static constraints = {        
        imagePath nullable: false
        versionId nullable: true
    }

    static mapping = {
        deleted defaultValue: false
    }
}

Здесь я не могу обновить запись и получаю исключение.

org.grails.datastore.mapping.core.OptimisticLockingException: The instance was updated by another user while you were editing.
...