How To Write Update Query in JPA Repository

How To Convert a String to Int in Java

In Spring Data JPA, you can write an update query using the @Modifying and @Query annotations in a JPA Repository. Since JPA does not provide an out-of-the-box update method in repositories, you must define a custom query using JPQL (Java Persistence Query Language) or native SQL.

Example 1: Writing an Update Query in JPA Repository using JPQL

Steps

1. Use @Modifying to indicate a modifying query (such as UPDATE or DELETE).

2. Use @Query to define the update statement.

3. Use @Transactional to ensure the query runs within a transaction.

4. Use @Param to pass parameters.

@Repository
public interface UserRepository extends JpaRepository<User, Long>
{

	@Modifying
	@Transactional
	@Query("UPDATE User u1 SET u1.status = :status WHERE u1.id = :id")
	int updateUserStatus(@Param("id") Long id, @Param("status") String status);
}

Explanation

  • The @Query annotation defines an update query using JPQL.
  • The @Modifying annotation tells Spring Data JPA that this is an update operation.
  • The @Transactional annotation ensures the method runs within a transaction.
  • The method returns int, which represents the number of updated rows.
 

Example 2: Using Native SQL

Steps

5. Annotate the method with @Modifying.

6. Use @Query with the parameter nativeQuery = true.

7. Ensure transactional context with @Transactional.

8. Define method parameters with @Param.

@Repository
public interface UserRepository extends JpaRepository<User, Long> 
{
	@Modifying
	@Transactional
	@Query(value = "UPDATE users SET status = :status WHERE id = :id", nativeQuery = true)
	int updateUserStatusNative(@Param("id") Long id, @Param("status") String status);
}

Explanation

The nativeQuery = true flag tells JPA to use raw SQL instead of JPQL.

Ensure the table name (users) matches your actual database table.

 

Usage in Service Layer

Call this method from your service class:

@Service
public class UserService {

	@Autowired
	private UserRepository userRepository;

	public void changeUserStatus(Long userId, String newStatus) {
    	userRepository.updateUserStatus(userId, newStatus);
	}
}
 

Key Points to Remember

  • Use @Modifying with @Query for update/delete queries.
  • Use @Transactional to ensure database consistency.
  • Use JPQL for portability across databases, but Native SQL if required.
  • Returns int, indicating the number of updated rows.

Disclaimer

This publication is for informational purposes only, and nothing contained in it should be considered legal advice. We expressly disclaim any warranty or responsibility for damages arising out of this information and encourage you to consult with legal counsel regarding your specific needs. We do not undertake any duty to update previously posted materials.

Post a Comment

Categories