खोज…


EAGER लाने के प्रकार का उपयोग न करें

हाइबरनेट दो प्रकार के भ्रूण का उपयोग कर सकता है जब आप दो संस्थाओं के बीच संबंध को मैप कर रहे हैं: EAGER और LAZY

सामान्य तौर पर, EAGER प्रकार एक अच्छा विचार नहीं है, क्योंकि यह जेपीए को हमेशा डेटा लाने के लिए कहता है, तब भी जब यह डेटा आवश्यक नहीं है।

उदाहरण के अनुसार, यदि आपके पास एक Person इकाई है और इस तरह के Address के साथ संबंध हैं:

@Entity
public class Person {

  @OneToMany(mappedBy="address", fetch=FetchType.EAGER)
  private List<Address> addresses;

}

जब भी आप किसी Person क्वेरी करते हैं, तो इस Person के Address की सूची भी वापस कर दी जाएगी।

इसलिए, अपनी इकाई को मैप करने के बजाय:

@ManyToMany(mappedBy="address", fetch=FetchType.EAGER)

उपयोग:

@ManyToMany(mappedBy="address", fetch=FetchType.LAZY)

भुगतान करने के लिए एक और बात ध्यान रिश्तों है @OneToOne और @ManyToOne । ये दोनों डिफ़ॉल्ट रूप से ईएजीईआर हैं। इसलिए, यदि आप अपने आवेदन के प्रदर्शन के बारे में चिंतित हैं, तो आपको इस प्रकार के संबंध के लिए लाने की आवश्यकता है:

@ManyToOne(fetch=FetchType.LAZY)

तथा:

@OneToOne(fetch=FetchType.LAZY)

विरासत के बजाय रचना का उपयोग करें

हाइबरनेट में वंशानुक्रम की कुछ रणनीतियाँ हैं। JOINED विरासत प्रकार एक बच्चे इकाई और मूल इकाई के बीच में शामिल हों है।

इस दृष्टिकोण के साथ समस्या यह है कि हाइबरनेट हमेशा विरासत में सभी शामिल तालिकाओं का डेटा लाती है।

उदाहरण के अनुसार, यदि आपके पास JOINED विरासत प्रकार के उपयोग से Bicycle और MountainBike :

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Bicycle {

}

तथा:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class MountainBike extends Bicycle {

}

MountainBike को हिट करने वाली कोई भी JPQL क्वेरी Bicycle डेटा लाएगी, जैसे SQL क्वेरी बनाना:

select mb.*, b.* from MountainBike mb JOIN Bicycle b ON b.id = mb.id WHERE ...

यदि आपके पास Bicycle लिए एक अन्य माता-पिता हैं (जैसे कि Transport , उदाहरण के लिए), तो यह उपरोक्त क्वेरी अतिरिक्त माता-पिता से भी इस माता-पिता का डेटा लाएगी।

जैसा कि आप देख सकते हैं, यह एक प्रकार का EAGER मैपिंग भी है। आपके पास इस वंशानुक्रम रणनीति का उपयोग करके केवल MountainBike तालिका का डेटा लाने का विकल्प नहीं है।

प्रदर्शन के लिए सबसे अच्छा उपयोग विरासत के बजाय रचना है।

इसे पूरा करने के लिए, आप एक फील्ड bicycle लिए MountainBike इकाई की मैपिंग कर सकते हैं:

@Entity
public class MountainBike {

    @OneToOne(fetchType = FetchType.LAZY)
    private Bicycle bicycle;

}

और Bicycle :

@Entity
public class Bicycle {

}

अब प्रत्येक क्वेरी डिफ़ॉल्ट रूप से केवल MountainBike डेटा लाएगी।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow