hibernate
हाइबरनेट में लाना
खोज…
परिचय
जेपीए (जावा पर्सिस्टेंस एपीआई) में फ़ेचिंग वास्तव में महत्वपूर्ण है। JPA में, HQL (हाइबरनेट क्वेरी लैंग्वेज) और JPQL (जावा पर्सिस्टेंस क्वेरी लैंग्वेज) का उपयोग उनके संबंधों के आधार पर संस्थाओं को लाने के लिए किया जाता है। हालाँकि यह देशी एसक्यूएल का उपयोग करके जो हम चाहते हैं उसे प्राप्त करने के लिए बहुत सारे ज्वाइनिंग क्वेश्चन और सब-क्वेश्चन का उपयोग करने से बेहतर है, लेकिन जेपीए में संबद्ध संस्थाओं को लाने की रणनीति अभी भी अनिवार्य रूप से हमारे आवेदन के प्रदर्शन को प्रभावित कर रही है।
यह FetchType.LAZY का उपयोग करने के लिए अनुशंसित है। जरूरत पड़ने पर कॉलम लाएं।
नीचे एक एम्प्लॉयर एंटिटी क्लास है जिसे टेबल एम्प्लॉयर के पास मैप किया जाता है। जैसा कि आप देख सकते हैं कि मैंने भ्रूण = FetchType.LAZY का इस्तेमाल किया है, इसके बजाय भ्रूण = FetchType.EAGER मिला है। मेरे द्वारा LAZY का उपयोग करने का कारण यह है क्योंकि नियोक्ता के पास बाद में बहुत सारे गुण हो सकते हैं और हर बार मुझे एक नियोक्ता के सभी क्षेत्रों को जानने की आवश्यकता नहीं हो सकती है, इसलिए उन सभी को लोड करना एक खराब प्रदर्शन का नेतृत्व करेगा फिर एक नियोक्ता लोड होता है।
@Entity
@Table(name = "employer")
public class Employer
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String Name;
@OneToMany(mappedBy = "employer", fetch = FetchType.LAZY,
cascade = { CascadeType.ALL }, orphanRemoval = true)
private List<Employee> employees;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
हालाँकि, LAZY के लिए संघों, अनियंत्रित परदे के पीछे कभी कभी LazyInitializationException की ओर जाता है। इस स्थिति में, हम LazyInitializationException से बचने के लिए बस HQL / JPQL में JOIN FETCH का उपयोग कर सकते हैं।
SELECT Employer employer FROM Employer
LEFT JOIN FETCH employer.name
LEFT JOIN FETCH employer.employee employee
LEFT JOIN FETCH employee.name
LEFT JOIN FETCH employer.address