@PersistenceConstructor
specifies the constructor to be used while instantiating an entity.
Example
@Document("employees")
public class Employee {
@Id
private String id;
@Field("employee_first_name")
@Indexed(name = "emp_first_name", direction = IndexDirection.ASCENDING)
private String firstName;
@Field("employee_last_name")
private String lastName;
@Transient
private String fullName;
public Employee() {
}
@PersistenceConstructor
public Employee(@Value("#root.employee_first_name") String firstName,
@Value("#root.employee_last_name") String lastName) {
System.out.println("Constructor is called");
this.firstName = firstName;
this.lastName = lastName;
this.fullName = this.firstName + "," + this.lastName;
}
......
......
}
Find the
below working application.
package com.sample.app.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.IndexDirection;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document("employees")
public class Employee {
@Id
private String id;
@Field("employee_first_name")
@Indexed(name = "emp_first_name", direction = IndexDirection.ASCENDING)
private String firstName;
@Field("employee_last_name")
private String lastName;
@Transient
private String fullName;
public Employee() {
}
@PersistenceConstructor
public Employee(@Value("#root.employee_first_name") String firstName,
@Value("#root.employee_last_name") String lastName) {
System.out.println("Constructor is called");
this.firstName = firstName;
this.lastName = lastName;
this.fullName = this.firstName + "," + this.lastName;
}
public String getId() {
return id;
}
public void setId(String 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 String getFullName() {
return this.fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Employee [id=").append(id).append(", firstName=").append(firstName).append(", lastName=")
.append(lastName).append(", fullName=").append(this.fullName).append("]");
return builder.toString();
}
}
EmployeeRepository.java
package com.sample.app.repository;
import java.util.List;
import java.util.stream.Stream;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;
import com.sample.app.entity.Employee;
@Repository
public interface EmployeeRepository extends MongoRepository<Employee, String> {
List<Employee> findByFirstName(String firstName);
List<Employee> findByLastName(String lastName);
List<Employee> findByFirstNameAndLastName(String firstName, String lastName);
@Query("{'firstName' : ?0}")
Stream<Employee> findAllByCustomQueryAndStream(String firstName);
}
application.properties
spring.data.mongodb.database=myorg spring.data.mongodb.port=27017 spring.data.mongodb.host=localhost logging.level.org.springframework.data=WARN
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>springDataMongo</groupId>
<artifactId>springDataMongo</artifactId>
<version>1</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
</project>
App.java
package com.sample.app;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import com.mongodb.MongoClient;
import com.sample.app.entity.Employee;
import com.sample.app.repository.EmployeeRepository;
@SpringBootApplication
public class App {
@Value("${spring.data.mongodb.database}")
private String database;
@Value("${spring.data.mongodb.host}")
private String host;
@Value("${spring.data.mongodb.port}")
private int port;
@Autowired
private EmployeeRepository empRepository;
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
public void dropPreviousData() {
MongoClient mongoClient = new MongoClient(host, port);
MongoOperations mongoOps = new MongoTemplate(mongoClient, database);
mongoOps.dropCollection("employees");
}
@Bean
public CommandLineRunner demo() {
return (args) -> {
dropPreviousData();
Employee emp1 = new Employee("Phalgun", "Garimella");
Employee emp2 = new Employee("Sankalp", "Dubey");
Employee emp3 = new Employee("Arpan", "Garimella");
Employee emp4 = new Employee("Phalgun", "Dubey");
empRepository.saveAll(Arrays.asList(emp1, emp2, emp3, emp4));
List<Employee> emps = empRepository.findAll();
emps.forEach(System.out::println);
};
}
}
Total
project structure looks like below.
Run
App.java, you can see below messages in console.
Constructor is called Constructor is called Constructor is called Constructor is called Constructor is called Constructor is called Constructor is called Constructor is called Employee [id=5d542616e4c7d86066cb98a1, firstName=Phalgun, lastName=Garimella, fullName=Phalgun,Garimella] Employee [id=5d542616e4c7d86066cb98a2, firstName=Sankalp, lastName=Dubey, fullName=Sankalp,Dubey] Employee [id=5d542616e4c7d86066cb98a3, firstName=Arpan, lastName=Garimella, fullName=Arpan,Garimella] Employee [id=5d542616e4c7d86066cb98a4, firstName=Phalgun, lastName=Dubey, fullName=Phalgun,Dubey]
You can
download complete working application form this link.
Previous Next Home
No comments:
Post a Comment