JPA مقابل Jakarta Data
صرّح بواجهة مستودع واترك Jakarta Data يولّد تنفيذ DAO تلقائياً.
مقارنة الكود
✕ Jakarta EE 8+
@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);
}
✓ Jakarta EE 11+
@Repository
public interface Users extends CrudRepository<User, Long> {
List<User> findByName(String name);
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
صفر كليشيه
صرّح بالواجهة؛ الحاوية تولّد تنفيذ DAO الكامل وقت النشر.
استعلامات مشتقة
أسماء الدوال مثل findByNameAndStatus تُحلَّل تلقائياً — لا JPQL أو SQL مطلوب.
قابل للنقل
أي بيئة تشغيل متوافقة مع Jakarta EE 11 توفر تنفيذ المستودع دون تقييد بائع.
الأسلوب القديم
JPA EntityManager
الأسلوب الحديث
مستودع Jakarta Data
منذ JDK
21
الصعوبة
متوسط
دعم JDK
JPA مقابل Jakarta Data
متاح
متاح منذ Jakarta EE 11 / Java 21 (2024)
كيف يعمل
يحوّل Jakarta Data (Jakarta EE 11) الوصول إلى البيانات إلى تصريح واجهة بحتة. تُزيّن الواجهة بـ @Repository وتمتد من نوع مستودع مدمج مثل CrudRepository. يولّد وقت التشغيل التنفيذ — بما في ذلك الاستعلامات المشتقة من أسماء الدوال مثل findByName — فلا كليشيهات EntityManager ولا سلاسل JPQL ولا دوال save/find مكتوبة يدوياً.
توثيق ذو صلة