In this post, we will see how to update an entity using Spring Data JPA. Consider we have an entity called Student.java.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "student_name")
private String studentName;
@Column(name = "roll_number")
private String rollNumber;
@Column(name = "university")
String university;
//getter & setter
}
Update entity using CrudRepository save() method.
Spring Data JPA provides save() method to update the entity. The CrudRepository interface contains the save() method that is used to update an entity. The save()
method also can be used to create an entity. Internally save()
uses isNew()
to check, entity has id or not. If id is null then it will call em.persist() otherwise, it will call em.merge().
Define StudentRepository
@Repository
public interface StudentRepository extends CrudRepository<Student, Serializable> {
}
Use save() method
@Transactional
public Student update(Student student) {
Student updateResponse = studentRepository.save(student);
return updateResponse;
}
Additional Note – We can also use saveAll() method to update an entity using Spring Data JPA.
See a complete example of save() and saveAll() method using Spring boot and oracle database.
Update entity using @Modifying annotation
We can also update an entity using Spring Data JPA @Modifying
annotation. We need to write a query method using @Query
annotations. Let’s see an example.
Repository code.
@Modifying
@Query("update Student s SET s.studentName = :studentName WHERE s.id = :id")
public void updateStudentUsingQueryAnnotation(@Param("studentName") String studentName, @Param("id") int id);
Calling repository method to update entity using @Modifying.
@Transactional
public String updateStudent(Student student) {
studentRepository.updateStudentUsingQueryAnnotation(student.getStudentName(), student.getId());
return "Record updated successfully using @Modifiying and @query Named Parameter";
}
Note – Check the tutorial that explains how to write query methods using @Query and @Modifying annotations to perform crud operation.
Let’s see a complete example of save() method using spring boot and MySQL.
Define maven dependency in pom.xml
<groupId>springdatajpa</groupId>
<artifactId>springdatajpa</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
Define entity class
@Entity
public class Student implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "roll_number")
private String rollNumber;
@Column(name = "university")
private String university;
}
Define Service and Repository interfaces.
StudentService.java
package com.javatute.service;
import com.javatute.entity.Student;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public interface StudentService {
public Student save(Student student);
public Student update(Student student);
}
Define the Repository interface i.e StudentRepository.java
@Repository
public interface StudentRepository extends JpaRepository<Student, Serializable> {
}
Define StudentServiceImpl.java
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentRepository studentRepository;
@Transactional
public Student save(Student student) {
Student createResponse = null;
createResponse = studentRepository.save(student);
return createResponse;
}
@Transactional
public Student update(Student student) {
Student updateResponse = studentRepository.save(student);
return updateResponse;
}
}
Define controller class
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@Autowired
private StudentRepository studentRepository;
@PostMapping("/create")
public Student createStudent1(@RequestBody Student student) {
Student createResponse = studentService.save(student);
return createResponse;
}
@PutMapping("/update")
public Student updateStudent(@RequestBody Student student) {
Student updateResponse = studentService.update(student);
return updateResponse;
}
}
JpaConfig.java
@Configuration
@EnableJpaRepositories(basePackages = "com.javatute.repository")
public class JpaConfig {
}
Define SpringMain.java
@SpringBootApplication
@ComponentScan(basePackages = "com.javatute.*")
@EntityScan("com.javatute.*")
public class SpringMain {
public static void main(String[] args) {
SpringApplication.run(SpringMain.class, args);
}
}
- Spring Data JPA example using spring boot.
- Spring Data JPA Interview Questions and Answers.
- What is spring data JPA and what are the benefits.
- Sorting in Spring Data JPA using Spring Boot.
- @Version Annotation Example In Hibernate.
- Hibernate Validator Constraints Example Using Spring Boot.
- @Temporal Annotation Example In Hibernate/Jpa Using Spring Boot.
- Hibernate Table Per Concrete Class Spring Boot.
- Hibernate Table Per Subclass Inheritance Spring Boot.
- Hibernate Single Table Inheritance using Spring Boot.
- One To One Mapping Annotation Example in Hibernate/JPA using Spring Boot and Oracle.
- One To One Bidirectional Mapping Example In Hibernate/JPA Using Spring Boot and Oracle.
- One To Many Mapping Annotation Example In Hibernate/JPA Using Spring Boot And Oracle.
- Many To One Unidirectional Mapping In Hibernate/JPA Annotation Example Using Spring Boot and Oracle.
- One To Many Bidirectional Mapping In Hibernate/JPA Annotation Example Using Spring Boot and Oracle.
- Many To Many Mapping Annotation Example In Hibernate/JPA Using Spring Boot And Oracle.
See save() method docs.