में बचाने मैं रिश्ता हैअद्यतन OneToMany सूची हाइबरनेट
- a.getId() -> वर्तमान नई आईडी ठीक
- a.getBList() -> अभी भी शून्य ...
तो, इस मामले में bList क्यों अपडेट नहीं है?
मैं एक के बाद बचाने के फिर से लोड करने की कोशिश की, इस तरह से:
A a=new A();
// setting A
B b=new B();
// setting B
b.setA(a);
session.save(b);
A loadedA=(A)session.get(A, a.getId());
लेकिन loadedA अभी भी एक शून्य blist एक तरह की है।
स्वाभाविक रूप से इस समस्या को मैं तेरा तरह से कर से बचने के लिए:
A a=new A();
// setting A
B b=new B();
// setting B
List<B> bList=new ArrayList<B>();
bList.add(b);
a.setBList(bList);
session.save(a); // this save a and b
इस तरह से सब अच्छा काम करते हैं, लेकिन मेरे सवाल यह है: क्यों आईडी सही ढंग से संचालन और blist सहेजने के बाद अपडेट नहीं? मुझे एक उदाहरण सही ढंग से पुनः लोड करने के लिए एक चुनिंदा कथन के साथ डीबी से पूछताछ करना है?
अद्यतन
मैं
StaleStateException यह अपवाद है: बैच अद्यतन अद्यतन से अप्रत्याशित पंक्ति संख्या लौटे
जब मैं के बाद saveOrUpdate इकाई एक करने की कोशिश इससे बी हटाना
// first delete old b record
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
a.getBList().remove(b);
b.setA(null);
session.delete(b);
// session.clear(); // this would solve my problem, but is it correct??
session.getTransaction().commit();
// then insert new b record
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
B b=new B();
a.getBList().add(b);
b.setA(a);
session.saveOrUpdate(a);
session.getTransaction().commit(); // this throw exception
यह दो ऑपरेशन पाठ्यक्रम की एक ही विधि में नहीं हैं, गुई घटना द्वारा निकाल दिए जाते हैं।
session.clear असली समाधान है? मैं कर रहा हूँ (शायद) गलत?
अद्यतन
को हटाने session.delete (ख) समस्या फिर से हल किया जाता है ... इसलिए, क्या corretc तरीका है? .. मुझे पता है ... im पूरी तरह से हाइबरनेट साथ noob
ब्लो, यहाँ http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html # ऑब्जेक्टस्टेट-ट्रांजिटिव आप किस दृढ़ता विधि के बारे में अच्छी जानकारी प्राप्त कर सकते हैं कैस्केडिंग –