@Query și @Modifying în Spring Data JPA în Spring Boot

data Spring Boot 3.x / Spring Data JPA Q&A / Distribuie cod

Scrierea de interogări personalizate JPQL și SQL nativ în interfețele Repository și execuția de comenzi DML de actualizare în loturi.

Sintaxă
@Query("SELECT u FROM User u WHERE ...") / @Modifying

Atunci când interogările derivate din numele metodelor devin prea lungi sau complexe, adnotarea @Query permite scrierea directă de interogări orientate pe obiecte JPQL (Java Persistence Query Language) sau interogări SQL native (prin parametrul nativeQuery = true).

Pentru comenzile care alterează date (UPDATE, DELETE), este obligatorie adăugarea adnotării @Modifying împreună cu @Transactional, semnalând contextului Hibernate să execute comanda DML și să sincronizeze cache-ul de persistență.

Exemplu: Interogare JPQL cu parametri nominali și operație @Modifying
package ro.dexblog.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ro.dexblog.demo.model.User;
import java.util.List;

@Repository
public interface UserRepository extends JpaRepository {

    // Interogare JPQL sigură cu parametri nominali:
    @Query("SELECT u FROM User u WHERE u.active = true AND u.email LIKE %:domain")
    List findActiveUsersByDomain(@Param("domain") String domain);

    // Operație DML în masă:
    @Modifying
    @Transactional
    @Query("UPDATE User u SET u.active = false WHERE u.lastLoginAt < :cutoffDate")
    int deactivateInactiveUsers(@Param("cutoffDate") java.time.Instant cutoffDate);
}

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: @Query și @Modifying în Spring Data JPA

Ai o nelămurire despre utilizarea comenzii @Query și @Modifying în Spring Data JPA sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.