तो, spring-data
कुछ अतिरिक्त जादू करता है जो जटिल प्रश्नों के साथ मदद करता है। यह पहले अजीब बात है और आप इसे दस्तावेज़ों में पूरी तरह से छोड़ देते हैं लेकिन यह वास्तव में शक्तिशाली और उपयोगी है।
इसमें कस्टम Repository
और एक कस्टम 'रिपोजिटरीइम्प्ल' बनाना और स्प्रिंग को कहां मिलना है। यहाँ एक उदाहरण है:
विन्यास वर्ग - एनोटेशन अपने खजाने पैकेज की ओर इशारा करते के साथ अपने अब भी जरूरी एक्सएमएल config इंगित (यह स्वचालित रूप से अब *Impl
कक्षाओं के लिए लग रहा है):
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
जेपीए-खजाने .xml - Spring
बताएं जहां आपकी रिपॉजिटरीज़ खोजें। इसके अलावा Spring
बता CustomImpl
फ़ाइल नाम के साथ कस्टम खजाने के लिए देखने के लिए:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />
</beans>
MyObjectRepository
- यह तुम कहाँ एनोटेट डाल सकते हैं और unannotated क्वेरी तरीकों।ध्यान दें कि कैसे इस भंडार इंटरफ़ेस फैली Custom
एक:
@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {
List<MyObject> findByName(String name);
@Query("select * from my_object where name = ?0 or middle_name = ?0")
List<MyObject> findByFirstNameOrMiddleName(String name);
}
MyObjectRepositoryCustom
- भंडार तरीकों कि अधिक जटिल हैं और एक साधारण क्वेरी या एक टिप्पणी के साथ संभाला नहीं जा सकता:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
- जहां आप वास्तव में उन विधियों को लागू करते हैं जो स्वचालित रूप से EntityManager
:
public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {
@Autowired
private EntityManager entityManager;
public final List<MyObject> findByNameWithWeirdOrdering(String name) {
Query query = query(where("name").is(name));
query.sort().on("whatever", Order.ASC);
return entityManager.find(query, MyObject.class);
}
}
आश्चर्यजनक रूप से, यह सब एक साथ आता है और दोनों इंटरफेस से विधियां (और CRUD इंटरफ़ेस, आप लागू) बिल्कुल ही दिखाई जब आप कार्य करें:
myObjectRepository.
आप देखेंगे:
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
यह वास्तव में काम करता है। और आप पूछताछ के लिए एक इंटरफेस मिलता है। spring-data
वास्तव में एक बड़े आवेदन के लिए तैयार है। और जितना अधिक प्रश्न आप सरल या एनोटेशन में धक्का दे सकते हैं, उतना ही बेहतर आप हैं।
यह सब Spring Data Jpa site पर प्रलेखित है।
शुभकामनाएं।
जहां तक मुझे पता है, यह थोड़ा अंतर बनाता है। उस व्यक्ति के साथ जाएं जिसके साथ आप अधिक आरामदायक हैं। बहस क्यों? – duffymo
मैं स्पष्ट रूप से हाइबरनेट के साथ अधिक आरामदायक हूं, लेकिन अगर मैं वही काम कर सकता हूं और अधिक उत्पादक बन सकता हूं, तो मैं नए दृष्टिकोणों को अपनाना चाहता हूं। हालांकि, अगर हाइबरनेट अभी भी अधिक शक्तिशाली है और मुझे बहुत कम समस्याएं आती हैं, तो ऐसा कुछ है जिसे मैं जानना चाहता हूं। – egervari
जेपीए ओआरएम का एक सामान्यीकरण है जो कई कार्यान्वयन में से एक के रूप में हाइबरनेट का उपयोग करता है। आप एक दूसरे के लिए क्या शक्तियों को जिम्मेदार ठहरा रहे हैं? जेपीए एक मानक है, लेकिन मैं दोनों के बीच थोड़ा अंतर देखता हूं। पूर्ण प्रकटीकरण के हित में, मैं कहूंगा कि मुझे किसी की भी परवाह नहीं है। दोनों आपके लिए एसक्यूएल उत्पन्न करते हैं। मैं इसे खुद लिखना चाहूंगा। ओआरएम हर समस्या और हर उपयोगकर्ता के लिए नहीं है। – duffymo