Для моего проекта я создал один веб-сервис, который вставляет только записи в базу данных (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.