2015-05-18 16 views
7

के अंदर उत्सुक संग्रह हैं, मुझे निम्नलिखित इकाइयों में समस्या है: वन, वृक्ष, पत्ता। जैसा कि आप कल्पना कर सकते हैं कि जंगल में बहुत सारे पेड़ हो सकते हैं, और एक पेड़ में बहुत सारे पत्ते होते हैं।आलसी लोडिंग बच्चे, जिनके पास

मैं जंगल के सभी पेड़ों को आलसी लोड करना चाहता हूं और पेड़ के सभी पत्ते लोड करना चाहता हूं।

Forest.java

@Entity 
@Table(name = "Forests") 
public class Forest implements Comparable<Forest> { 

     @Id 
     @Column(name = "forestnumber", length=10, nullable=false) 
     private String number; 

     @OneToMany(fetch=FetchType.LAZY, mappedBy="forest") 
     private Set<Tree> trees = null; 

     // some other attributes and methods 

Tree.java

@Entity 
@Table(name = "Trees") 
public class Tree implements Comparable<Tree> { 

     @Id 
     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     @Column(name="tree_id", nullable=false) 
     private int id; 

     @ManyToOne(fetch = FetchType.EAGER) 
     @JoinColumn(name = "forestnumber", nullable = false) 
     @Fetch(FetchMode.JOIN) 
     private Forest forest; 

     @OneToMany(fetch=FetchType.EAGER, mappedBy="tree") 
     @Fetch(FetchMode.JOIN) 
     private Set<Leaf> leafs = null; 

     // some other attributes and methods 

Leaf.java

@Entity 
@Table(name = "Leafs") 
public class Leaf implements Comparable<Leaf> { 

     @Id 
     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     @Column(name="leaf_id", nullable=false) 
     private int id; 

     @ManyToOne(fetch = FetchType.EAGER) 
     @JoinColumn(name = "tree_id", nullable = false) 
     @Fetch(FetchMode.JOIN) 
     private Tree tree; 

     // some other attributes and methods 
: हाइबरनेट एनोटेशन के साथ मेरे कोड ऐसा दिखाई देता है

मेरी समस्या: जंगल लोड करना और getTrees() विधि को कॉल करना परिणाम चुनिंदा वक्तव्यों के एक सेट में परिणाम। हाइबरनेट सभी पेड़ों को इकट्ठा करने के लिए प्रत्येक पेड़ के लिए सभी पेड़ों और दूसरे को पाने के लिए एक बयान निष्पादित करता है। मेरी राय में हाइबरनेट को एक ही समय में पेड़ों और पत्तियों को इकट्ठा करने के लिए, शामिल होने का उपयोग करके केवल एक कथन उत्पन्न करना चाहिए।

क्या कोई मुझे बता सकता है, मेरी समस्या का कारण और मैं इसे कैसे ठीक कर सकता हूं? बहुत बहुत धन्यवाद!

अलविदा: अगर मैं जंगल के पेड़ों की fetching रणनीति को EAGER में बदलता हूं तो सबकुछ ठीक काम करता है, केवल एक ही कथन के साथ।

उत्तर

0

आप

Hibernate.initialize(forestInstance); 

प्रारंभ या fetch प्रदान बेसब्री से सभी बच्चों को पुनः प्राप्त करने में शामिल होने के साथ एक प्रश्न लिखने की कोशिश कर सकते हैं।

भी

Is there a way to change the JPA fetch type on a method?

0

देखें लाने = FetchType.EAGER निकालें। चुनिंदा वक्तव्यों को कैस्केड करने वाले ट्रिगर्स को उत्सुक करना।

+0

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

+0

@OneToMany से fetchType.EAGER को निकालने का प्रयास करें (fetch = FetchType.EAGER, mappedBy = "tree") अपने मुद्दे को ठीक करने के लिए पत्ती संग्रह के तहत – SanyaLuc

+0

@OneToMany से fetch = FetchType.EAGER को हटाएं (fetch = FetchType.EAGER, mappedBy = "पेड़") मदद नहीं की –

संबंधित मुद्दे