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);
}
Întrebări & Exemple de Cod:
@Query și @Modifying în Spring Data JPAAi o nelămurire despre utilizarea comenzii
@Query și @Modifying în Spring Data JPAsau 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.