ArangoOperations interface provides ‘replace’ method to replace a document.
Signature
<T> MultiDocumentEntity<? extends DocumentEntity> replace(Iterable<T> values, Class<T> entityClass, DocumentReplaceOptions options) throws DataAccessException;
<T> MultiDocumentEntity<? extends DocumentEntity> replace(Iterable<T> values, Class<T> entityClass) throws DataAccessException;
Replaces multiple documents in the specified collection with the ones in the values, the replaced documents are specified by the _key attributes in the documents in values.
‘DocumentReplaceOptions’ is used to provide additional options while replacing the document. Below table summarizes possible options while replacing the document.
Option |
Data type |
Description |
waitForSync |
Boolean |
Wait until document has been synced to disk. |
ignoreRevs |
Boolean |
By default, or if this is set to true, the _rev attributes in the given document is ignored. If this is set to false, then the _rev attribute given in the body document is taken as a precondition. The document is only replaced if the current revision is the one specified. |
ifMatch |
String |
Replace a document based on target revision |
returnNew |
Boolean |
Return additionally the complete new document under the attribute new in the result. |
returnOld |
Boolean |
Return additionally the complete previous revision of the changed document under the attribute old in the result. |
silent |
Boolean |
If set to true, an empty object will be returned as response. No meta-data will be returned for the created document. This option can be used to save some network traffic. |
streamTransactionId |
String |
If set, the operation will be executed within the transaction. |
Example
DocumentReplaceOptions docReplaceOptions = new DocumentReplaceOptions();
docReplaceOptions.returnNew(true);
docReplaceOptions.returnOld(true);
MultiDocumentEntity<DocumentUpdateEntity> updatedDocs = (MultiDocumentEntity<DocumentUpdateEntity>) arangoTemplate.replace(Arrays.asList(emp1ToReplace, emp2ToReplace), Employee.class, docReplaceOptions);
Find the below working application.
Step 1: Create new maven project ‘arango-template-replace-documents’.
Step 2: Update pom.xml with maven dependencies.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample.app</groupId>
<artifactId>arango-template-replace-documents</artifactId>
<version>1</version>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<dependencies>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-spring-boot-starter</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Step 3: Define entity class.
Employee.java
package com.sample.app.entity;
import com.arangodb.springframework.annotation.ArangoId;
import com.arangodb.springframework.annotation.Document;
import org.springframework.data.annotation.Id;
@Document("employees")
public class Employee {
@Id // db document field: _key
private String key;
@ArangoId // db document field: _id
private String arangoId;
private Integer id;
private String firstName;
private String lastName;
private Integer age;
public Employee(Integer id, String firstName, String lastName) {
super();
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public Employee() {
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getArangoId() {
return arangoId;
}
public void setArangoId(String arangoId) {
this.arangoId = arangoId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Employee [key=" + key + ", arangoId=" + arangoId + ", id=" + id + ", firstName=" + firstName
+ ", lastName=" + lastName + ", age=" + age + "]";
}
}
Step 4: Define Arango DB configuration class.
ArangoConfig.java
package com.sample.app.config;
import org.springframework.context.annotation.Configuration;
import com.arangodb.ArangoDB;
import com.arangodb.springframework.annotation.EnableArangoRepositories;
import com.arangodb.springframework.config.ArangoConfiguration;
@Configuration
@EnableArangoRepositories(basePackages = { "com.sample.app" })
public class ArangoConfig implements ArangoConfiguration {
@Override
public ArangoDB.Builder arango() {
return new ArangoDB.Builder().host("localhost", 8529).user("root").password("tiger");
}
@Override
public String database() {
return "abc_org";
}
}
Step 5: Define main application class.
App.java
package com.sample.app;
import java.util.Arrays;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import com.arangodb.entity.DocumentCreateEntity;
import com.arangodb.entity.DocumentUpdateEntity;
import com.arangodb.entity.MultiDocumentEntity;
import com.arangodb.model.DocumentCreateOptions;
import com.arangodb.model.DocumentReplaceOptions;
import com.arangodb.model.DocumentUpdateOptions;
import com.arangodb.springframework.core.ArangoOperations;
import com.sample.app.entity.Employee;
@SpringBootApplication
public class App {
@Autowired
private ArangoOperations arangoTemplate;
public static void main(String args[]) {
SpringApplication.run(App.class, args);
}
private static void print(DocumentCreateEntity documentCreateEntity) {
System.out.println("\nid : " + documentCreateEntity.getId());
System.out.println("key : " + documentCreateEntity.getKey());
System.out.println("revision : " + documentCreateEntity.getRev());
System.out.println("doc : " + documentCreateEntity.getNew());
}
@Bean
public CommandLineRunner demo() {
return (args) -> {
Employee emp1 = new Employee(1, "Shanmukha Rao", "Kummari");
Employee emp2 = new Employee(1, "Sarath", "Chandra");
DocumentCreateOptions docCreateOptions = new DocumentCreateOptions();
docCreateOptions.returnNew(true);
DocumentCreateEntity documentCreateEntity1 = (DocumentCreateEntity) arangoTemplate.insert(emp1,
docCreateOptions);
DocumentCreateEntity documentCreateEntity2 = (DocumentCreateEntity) arangoTemplate.insert(emp2,
docCreateOptions);
print(documentCreateEntity1);
print(documentCreateEntity2);
Employee emp1ToReplace = new Employee();
emp1ToReplace.setKey(documentCreateEntity1.getKey());
emp1ToReplace.setFirstName("Shanmukha Rao Kummari");
emp1ToReplace.setAge(35);
Employee emp2ToReplace = new Employee();
emp2ToReplace.setKey(documentCreateEntity2.getKey());
emp2ToReplace.setFirstName("Sarath Chandra");
emp2ToReplace.setAge(42);
DocumentReplaceOptions docReplaceOptions = new DocumentReplaceOptions();
docReplaceOptions.returnNew(true);
docReplaceOptions.returnOld(true);
MultiDocumentEntity<DocumentUpdateEntity> updatedDocs = (MultiDocumentEntity<DocumentUpdateEntity>) arangoTemplate
.replace(Arrays.asList(emp1ToReplace, emp2ToReplace), Employee.class, docReplaceOptions);
Collection<DocumentUpdateEntity> updatedDocsCollection = updatedDocs.getDocuments();
System.out.println("\nUpdated document");
for (DocumentUpdateEntity updatedDoc : updatedDocsCollection) {
System.out.println("\nid : " + updatedDoc.getId());
System.out.println("key : " + updatedDoc.getKey());
System.out.println("revision : " + updatedDoc.getRev());
System.out.println("newDoc : " + updatedDoc.getNew());
System.out.println("oldDoc : " + updatedDoc.getOld());
}
};
}
}
Total project structure looks like below.
Run App.java, you will see below messages in console.
id : employees/36762
key : 36762
revision : _cUlY3aq---
doc : {"_key":"36762","_id":"employees\/36762","_rev":"_cUlY3aq---","id":1,"firstName":"Shanmukha Rao","lastName":"Kummari","_class":"com.sample.app.entity.Employee"}
id : employees/36764
key : 36764
revision : _cUlY3b----
doc : {"_key":"36764","_id":"employees\/36764","_rev":"_cUlY3b----","id":1,"firstName":"Sarath","lastName":"Chandra","_class":"com.sample.app.entity.Employee"}
Updated document
id : employees/36762
key : 36762
revision : _cUlY3cO---
newDoc : {"_key":"36762","_id":"employees\/36762","_rev":"_cUlY3cO---","firstName":"Shanmukha Rao Kummari","age":35,"_class":"com.sample.app.entity.Employee"}
oldDoc : {"_key":"36762","_id":"employees\/36762","_rev":"_cUlY3aq---","id":1,"firstName":"Shanmukha Rao","lastName":"Kummari","_class":"com.sample.app.entity.Employee"}
id : employees/36764
key : 36764
revision : _cUlY3cO--A
newDoc : {"_key":"36764","_id":"employees\/36764","_rev":"_cUlY3cO--A","firstName":"Sarath Chandra","age":42,"_class":"com.sample.app.entity.Employee"}
oldDoc : {"_key":"36764","_id":"employees\/36764","_rev":"_cUlY3b----","id":1,"firstName":"Sarath","lastName":"Chandra","_class":"com.sample.app.entity.Employee"}
You can download complete working application from below link.
https://github.com/harikrishna553/springboot/tree/master/arangodb/arango-template-replace-documents
No comments:
Post a Comment