2014-07-20 14 views
7

मैं एक अद्यतन क्वेरी जो एसक्यूएल में इस प्रकार दिखाई देगा चलाने के लिए कोशिश कर रहा हूँ:अद्यतन कई हाइबरनेट मानदंड का उपयोग कर पंक्तियों

update studentMaster set sess_status = 'G' where ACADEM_YEAR = COURSE_YEAR; 

मैं मानदंड इस तरह का उपयोग कर क्वेरी को फिर से बनाने के लिए कोशिश कर रहा हूँ:

public void updateSessionStatus() { 
     Session sess = factory.openSession(); 
     Transaction tx = null; 
     try { 
      tx = sess.beginTransaction(); 
      Criteria crit = sess.createCriteria(CollegeStudentsMaster.class); 
      crit.add(Restrictions.eqProperty("academicYear", "courseYears")); 
      CollegeStudentsMaster e = (CollegeStudentsMaster) crit.uniqueResult(); 
      e.setSessionStatus("G"); 
      sess.saveOrUpdate(e); 
      tx.commit(); 
     } catch (HibernateException asd) { 
      if (tx != null) { 
       tx.rollback(); 
      } 
      log.debug(asd.getMessage()); 
     } finally { 
      sess.close(); 
     } 
    } 

यह काम नहीं कर रहा है क्योंकि इस मानदंड को पूरा करने वाली पंक्तियां बहुत हैं, मेरा अनूठा परिणाम मुझे लगता है कि समस्या है। मानदंड को पूरा करने वाली सभी पंक्तियों के लिए मैं इसे अद्यतन में कैसे परिवर्तित कर सकता हूं। मैं एचक्यूएल क्वेरी का उपयोग नहीं करना चाहता, मैं इसे मानदंड के साथ कर रहा हूं।

उत्तर

8
public void updateSessionStatus() { 
     Session sess = factory.openSession(); 
     Transaction tx = null; 
     try { 
      tx = sess.beginTransaction(); 
      Criteria crit = sess.createCriteria(CollegeStudentsMaster.class); 
      crit.add(Restrictions.eqProperty("academicYear", "courseYears")); 
      // Here is updated code 
      ScrollableResults items = crit.scroll(); 
      int count=0; 
      while (items.next()) { 
       CollegeStudentsMaster e = (CollegeStudentsMaster)items.get(0); 
       e.setSessionStatus("G"); 
       sess.saveOrUpdate(e); 
       if (++count % 100 == 0) { 
        sess.flush(); 
        sess.clear(); 
       } 
      } 
      tx.commit(); 
     } catch (HibernateException asd) { 
      if (tx != null) { 
       tx.rollback(); 
      } 
      log.debug(asd.getMessage()); 
     } finally { 
      sess.close(); 
     } 
    } 

यह हमेशा कि थोक संचालन बहुत डेटाबेस के पास निष्पादित और हम सत्र जब तक कि वे आवश्यक हैं में अद्यतन वस्तु रखने के लिए, इसलिए थोक संचालन निष्पादित करते समय सत्र में लोड वस्तुओं से बचने की कोशिश की जरूरत नहीं है का सुझाव दिया है।

+0

धन्यवाद कि काम किया। – ErrorNotFoundException

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