2014-07-20 25 views
7

Sto cercando di eseguire una query di aggiornamento, che sarebbe simile a questa in SQL:aggiornamento più righe utilizzando criteri di Hibernate

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

sto cercando di ricreare la query utilizzando Criteri come questo:

Questo non funziona perché le righe che soddisfano questo criterio sono molte, il mio unico risultato è il problema qui credo. Come posso convertirlo in un aggiornamento per tutte le righe che soddisfano i criteri. Non voglio usare la query HQL, preferisco farlo con Criteria.

risposta

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(); 
     } 
    } 

è sempre consigliabile che si eseguono le operazioni di massa molto vicino alla banca dati e che non hanno bisogno di tenere oggetto aggiornato in sessione a meno che essi sono tenuti, Quindi cercare di evitare gli oggetti di carico in sessione durante l'esecuzione di operazioni di massa.

+0

Grazie a quello ha funzionato. – ErrorNotFoundException

Problemi correlati