hibernate - स्प्रिंग बूट डाटा जेपीए एप्लीकेशन में मापदंड क्वेरी का उपयोग कैसे करें




spring-boot spring-data-jpa (4)

मेरे पास एक ऐसा एप्लिकेशन है जो स्प्रिंग बूट डाटा जेपीए का उपयोग करता है। अब तक मैं इस तरह रिपॉजिटरी का उपयोग कर रहा हूं

public interface StudentRepository extends CrudRepository<StudentEntity, Integer>{
          @Query(value = "SELECT s.studentname "
                    +"FROM StudentEntity s, CourseEntity c "
                    +"WHERE     s.courseid = c.courseid "
                    +"AND s.courseid IN (SELECT c.courseid "
                    +"FROM CourseEntity c "
                    +"WHERE c.coursename = ?1)")
      List<String> nameByCourse(String coursename);
}

मैं हाइबरनेट के मानदंड प्रश्न का उपयोग कैसे कर सकता हूं, ऐसे मामलों के लिए स्प्रिंग बूट अनुप्रयोग में उपलब्ध कराता है I


स्प्रिंग डॉक्टर हाइबरनेट के अनुसार टेम्पलेट :

नोट: हाइबरनेट एक्सेस कोड को सादे हाइबरनेट शैली में भी कोडित किया जा सकता है। इसलिए, नव शुरू की गई परियोजनाओं के लिए, SessionFactory.getCurrentSession () पर आधारित कोडिंग डेटा एक्सेस ऑब्जेक्ट के मानक हाइबरनेट शैली को अपनाने पर विचार करें। हे हाइबरनेट टेम्पलेट मुख्यतः हाइबरनेट 3 आधारित डेटा एक्सेस कोड के लिए माइग्रेशन हेल्पर के रूप में मौजूद है, हाइबरनेट 4.x में बग फिक्स के लाभ के लिए।

हाइबरनेट डॉक्टर के अनुसार:

नया विकास जेपीए javax.preistence.criteria.CriteriaQuery एपीआई पर ध्यान केंद्रित करना चाहिए। आखिरकार, हाइबरनेट-विशिष्ट मापदंड विशेषताएँ जेपीए javax.preistence.criteria.CriteriaQuery के एक्सटेंशन के रूप में पोर्ट किया जाएगा।

तो JPQL मानदंड का उपयोग करना बेहतर है: जेपीए मानदंड एपीआई क्वेरीज़

उदाहरण:

  CriteriaBuilder cb = entityManager.getCriteriaBuilder();

  CriteriaQuery<Country> q = cb.createQuery(Country.class);
  Root<Country> c = q.from(Country.class);
  q.select(c);

जहां इकाई प्रबंधक को @ एटोवर्ड किया जाना चाहिए। विस्तार से जानकारी के लिए, उपरोक्त लिंक देखें


docs

कस्टम कार्यक्षमता के साथ एक रिपोजिटरी को समृद्ध करने के लिए आप पहले एक इंटरफ़ेस और कस्टम कार्यक्षमता के लिए कार्यान्वयन परिभाषित करते हैं। कस्टम इंटरफ़ेस का विस्तार करने के लिए प्रदान किए गए रिपॉज़िटरी इंटरफ़ेस का उपयोग करें

जैसे अंतरफलक को परिभाषित करें

public interface StudentRepositoryCustom {

    List<String> nameByCourse(String coursename);

}

फिर इस इंटरफ़ेस का कस्टम कार्यान्वयन इस तरह परिभाषित करें

@Service
class StudentRepositoryImpl implements StudentRepositoryCustom {

    @PersistenceContext
    private EntityManager entityManager;

    public List<String> nameByCourse(String coursename) {            
        CriteriaBuilder cb = em.getCriteriaBuilder();
        //Using criteria builder you can build your criteria queries.
    }

}

अब आप इस कस्टम रिपॉजिटरी कार्यान्वयन को अपने जेपीए रिपॉजिटरी में बढ़ा सकते हैं।

public interface StudentRepository extends CrudRepository<StudentEntity, Integer>, StudentRepositoryCustom {

}

मापदंड क्वेरी और मानदंड बिल्डर के बारे में here और जानें


आप क्वेरी निर्माण को स्प्रिंग डेटा जेपीए प्रलेखन में संदर्भित कर सकते हैं और मेज पर एक नज़र डाल सकते हैं, जेपीए ने स्ट्रिंग क्वेरी का उपयोग करने से बचने के तरीके के नाम से कई क्वेरी निर्माण कर सकते हैं


जेपीए 2 एक मानदंड एपीआई का परिचय देता है जिसका उपयोग प्रश्नों को प्रोग्राम बनाने के लिए किया जा सकता है।

आप JpaSpecificationExecutor से एक नया इंटरफ़ेस बढ़ा सकते हैं

public interface CustomerRepository extends CrudRepository<Customer, Long>, JpaSpecificationExecutor {
    default List<Customer> findCustomers() {
    return findAll(CustomerSpecs.findCustomers());
}

फिर एक ग्राहक चश्मा बनाएँ

public final class CustomerSpecs {

public static Specification<Customer> findCustomers() {
    return new Specification<Customer>() {
        public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> query,
        CriteriaBuilder builder) {

     LocalDate date = new LocalDate().minusYears(2);
     return builder.lessThan(root.get("birthday"), date);
  }
};
}

अधिक विवरण के लिए, यहां इस वसंत डॉक्टर को देखें

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications





spring-data-jpa