🧠
Data Access

EntityManager

The Low-Level JPA API
💡 EntityManager ek DIRECT PHONE LINE hai database ke saath — Repository interfaces ek RECEPTIONIST hain (aasan, structured requests ke liye), lekin kabhi-kabhi tumhe DIRECTLY specialist (EntityManager) se baat karni padti hai, complex, custom scenarios ke liye.

EntityManager JPA ka CORE, LOW-LEVEL interface hai — Spring Data JPA repositories INTERNALLY EntityManager use karte hain. Normal CRUD operations ke liye, EntityManager DIRECTLY touch karne ki zaroorat NAHI (repositories kaafi hain) — lekin ADVANCED scenarios mein (dynamic queries, batch processing, fine-grained control) zaroorat pad sakti hai.

EntityManager ek "Persistence Context" bhi maintain karta hai — EK TRANSACTION ke SCOPE mein, ek SESSION-level cache. Agar SAME entity DO BAAR fetch ki jaaye EK transaction ke andar, DUSRI baar database call NAHI hoti.

@Repository
public class CustomUserRepository {
    @PersistenceContext
    private EntityManager entityManager;

    public List<User> searchDynamic(String field, String value) {
        // Complex, DYNAMIC query jo repository naming se express nahi ho sakti:
        return entityManager.createQuery(
            "SELECT u FROM User u WHERE u." + field + " = :value", User.class)
            .setParameter("value", value)
            .getResultList();
    }
}
🧠
EntityManager ek DIRECT PHONE LINE hai database ke saath — Repository interfaces ek RECEPTIONIST hain (aasan, structured requests ke liye), lekin kabhi-kabhi tumhe DIRECTLY specialist (EntityManager) se baat karni padti hai, complex, custom scenarios ke liye.
1 / 2
⚡ Quick Recap
  • EntityManager = JPA ka CORE, low-level API
  • Repositories INTERNALLY EntityManager use karte hain
  • Persistence Context = transaction-scoped first-level cache
Is page mein (2 subtopics)

EntityManager JPA ka CORE interface hai — entity ko PERSIST (save), FIND (fetch by ID), MERGE (update), REMOVE (delete) karne ke liye. Spring Data JPA repositories internally EntityManager USE karte hain — application code zyaadatar directly EntityManager touch nahi karta, lekin ADVANCED, custom scenarios mein zaroorat pad sakti hai.

@PersistenceContext
private EntityManager entityManager;

public User findUserDetailed(Long id) {
    return entityManager.find(User.class, id);
}

EntityManager ek "Persistence Context" maintain karta hai — ek SESSION-SCOPED CACHE. Agar EK HI transaction ke andar, same entity DO BAAR fetch ki jaaye, DUSRI baar DATABASE call NAHI hoti — persistence context se hi mil jaati hai. Isse UNNECESSARY database round-trips AVOID hote hain.

💡Tip: Ye "first-level cache" AUTOMATIC hai — koi manual configuration nahi chahiye, JPA ka BUILT-IN behavior hai, transaction ke SCOPE tak limited.