Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What is the difference between @Query with JPQL and native SQL queries? @Query में JPQL और नेटिव SQL क्वेरीज़ में क्या अंतर है?

Answer

@Query lets you write a custom query directly on a repository method when a derived method name would be too complex or unclear. By default it expects JPQL, which operates on entity objects and their fields rather than table and column names, making it database-agnostic.

Setting nativeQuery = true switches to raw SQL, which operates on actual table/column names and can use database-specific features, but ties the query to a specific database dialect and bypasses some JPA entity-mapping benefits.

@Query("SELECT u FROM User u WHERE u.status = :status")
List<User> findByStatus(@Param("status") String status);

@Query(value = "SELECT * FROM users WHERE status = :status", nativeQuery = true)
List<User> findByStatusNative(@Param("status") String status);

@Query आपको रिपॉज़िटरी मेथड पर सीधे कस्टम क्वेरी लिखने देता है जब डिराइव्ड मेथड नाम बहुत जटिल या अस्पष्ट हो जाए। डिफ़ॉल्ट रूप से यह JPQL अपेक्षित करता है, जो टेबल और कॉलम नामों के बजाय एंटिटी ऑब्जेक्ट्स और उनके फील्ड्स पर काम करता है, जिससे यह डेटाबेस-एग्नॉस्टिक बनता है।

nativeQuery = true सेट करने से यह रॉ SQL में बदल जाता है, जो वास्तविक टेबल/कॉलम नामों पर काम करता है और डेटाबेस-विशिष्ट फीचर्स का उपयोग कर सकता है, लेकिन क्वेरी को किसी विशिष्ट डेटाबेस डायलेक्ट से बांध देता है।

@Query("SELECT u FROM User u WHERE u.status = :status")
List<User> findByStatus(@Param("status") String status);

@Query(value = "SELECT * FROM users WHERE status = :status", nativeQuery = true)
List<User> findByStatusNative(@Param("status") String status);

Was this answer clear?