JPA বনাম জাকার্তা ডেটা (Jakarta Data)
একটি রিপোজিটরি ইন্টারফেস ডিক্লেয়ার করুন এবং জাকার্তা ডেটাকে স্বয়ংক্রিয়ভাবে DAO ইমপ্লিমেন্টেশন তৈরি করতে দিন।
@PersistenceContext
EntityManager em;
public User findById(Long id) {
return em.find(User.class, id);
}
public List<User> findByName(String name) {
return em.createQuery(
"SELECT u FROM User u WHERE u.name = :name",
User.class)
.setParameter("name", name)
.getResultList();
}
public void save(User user) {
em.persist(user);
}
@Repository
public interface Users extends CrudRepository<User, Long> {
List<User> findByName(String name);
}
জিরো বয়লারপ্লেট (Zero Boilerplate)
ইন্টারফেস ডিক্লেয়ার করুন; কন্টেইনার ডিপ্লয়ের সময় সম্পূর্ণ DAO ইমপ্লিমেন্টেশন জেনারেট করে।
ডেরাইভড কোয়েরি (Derived Queries)
FindByNameAndStatus-এর মতো মেথডের নামগুলো স্বয়ংক্রিয়ভাবে পার্স করা হয় – কোনো JPQL বা SQL এর প্রয়োজন নেই।
পোর্টেবল (Portable)
যেকোনো জাকার্তা EE 11 কমপ্লায়েন্ট রানটাইম কোনো ভেন্ডর লক-ইন ছাড়াই রিপোজিটরি ইমপ্লিমেন্টেশন প্রদান করে।
জাকার্তা EE 11 / Java 21 (2024) থেকে উপলব্ধ
জাকার্তা ডেটা (Jakarta EE 11) ডেটা অ্যাক্সেসকে একটি পিওর ইন্টারফেস ডিক্লারেশনে পরিণত করে। আপনি @Repository অ্যানোটেশন দিয়ে একটি ইন্টারফেস তৈরি করেন এবং CrudRepository-এর মতো বিল্ট-ইন রিপোজিটরি টাইপ এক্সটেন্ড করেন। রানটাইম স্বয়ংক্রিয়ভাবে ইমপ্লিমেন্টেশন জেনারেট করে – FindByName-এর মতো মেথডের নাম থেকে ডেরাইভড কোয়েরি (derived queries) সহ – ফলে কোনো EntityManager বয়লারপ্লেট, JPQL স্ট্রিং বা হাতে লেখা সেভ/ফাইন্ড মেথডের প্রয়োজন হয় না।