की ओर जाता है मेरे पास लिंक तालिका में एक अतिरिक्त कॉलम के साथ कई से अधिक संबंध हैं। मैंने इसे इस तरह से कॉन्फ़िगर किया है कि स्वामित्व वाली पक्ष बच्चों को उत्सुक बनाती है (इसलिए मुझे LazyInitializationException
नहीं मिलता है) और विपरीत दिशा में यह आलसी है। यह काम।@ ट्रांसेक्शनल (readOnly = true) LazyInitializationException
मैं अब फ़ाइन-ट्यून करने के लिए लेन-देन (से पहले वहाँ डीएओ और सेवा वर्गों के वर्ग स्तर पर सिर्फ @Transactional
चाहता था मैं readOnly = true
को विधि getById
सेट:।
@Transactional(readOnly = true)
public Compound getById(Long id) {
return compoundDAO.getById(id);
}
इस बदलाव के बाद मैं एक LazyInitializationException
में मिलता है निम्नलिखित स्निपेट:
Compound compound = compoundService.getById(6L);
Structure structure = compound.getComposition().get(0).getStructure();
System.out.println("StructureId: "+ structure.getId()); // LazyInitializationException
अगर मैं (readOnly = true)
इस काम करता है को दूर किसी को भी इस व्यवहार की व्याख्या कर सकते मैं वसंत + हाइबरनेट भ्रामक का प्रकार का उपयोग के रूप में मैं किसी भी कारण है कि वें नहीं दिख रहा है!?। क्या डेटा को लोड किया जाना चाहिए?
संपादित करें:
संबंध परिभाषाओं कीस्निपेट्स। यह लिंक तालिका में एक कॉलम के साथ कई से अधिक है।
मालिक पक्ष (जैसे यौगिक संरचनाएं शामिल हैं):
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure",
cascade = CascadeType.ALL)
@OrderBy("pk.compound.id ASC")
private List<CompoundComposition> occurence;
कई-टू-वन @Embeddable आईडी वर्ग
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public Compound getCompound() {
return compound;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public Structure getStructure() {
return structure;
}
संपादित 2 में:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.compound",
cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("pk.structure.id ASC")
private List<CompoundComposition> composition = new ArrayList<>();
पक्ष से संबंध रखता है :
सेंट एसीके ट्रेस
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:272) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
at org.bitbucket.myName.myApp.entity.Structure_$$_javassist_0.getId(Structure_$$_javassist_0.java) ~[classes/:na]
at org.bitbucket.myName.myApp.App.main(App.java:31) ~[classes/:na]
संपादित करें 3:
लॉग केवल पढ़ने के साथ बहुत अलग है और यह याद आ रही है हिस्सा थे संबंधों लोड किए गए हैं, जैसे:
इसके अलावा मेरी टिप्पणी देखें। लॉग में कुछ चयन गायब हैं।
संपादित करें 4:
तो मैं एक बुनियादी DriverManagerDataSource और कोई कनेक्शन पूल के साथ थक गया। मुद्दा बिल्कुल वही है। मेरे लिए हाइबरनेट में एक समस्या की तरह दिखता है।
कक्षा स्तर की लेनदेन परिभाषा क्या है? –
बस @ ट्रांसेक्शनल। –
क्या आप मॉडल कक्षाओं के स्निपेट पोस्ट कर सकते हैं? और, क्या आपके पास अभी भी डीएओ कक्षा के शीर्ष पर '@ ट्रांजेक्शनल 'एनोटेशन है? – sbzoom