@Query — defines JPQL/SQL query. @Modifying — enables update/delete operations.
@Query:
1@Query("SELECT u FROM User u WHERE u.name = :name")2List<User> findByName(@Param("name") String name);34@Query("SELECT u.name, u.email FROM User u WHERE u.age > :age")5List<Object[]> findNameEmailByAge(@Param("age") int age);
@Modifying:
1@Modifying2@Transactional3@Query("UPDATE User u SET u.active = false WHERE u.lastLogin < :date")4int deactivateUsers(@Param("date") LocalDate date);56@Modifying7@Transactional8@Query("DELETE FROM User u WHERE u.active = false")9int deleteInactiveUsers();
How it works:
Key difference:
Best practice: