2014-07-20 28 views
7

ben sql şu şekilde görünecektir bir güncelleştirme sorgusu çalıştırmak çalışıyorum:Güncelleme birden fazla satır

: Ben Kriterleri böyle kullanarak sorguyu yeniden oluşturmaya çalışıyorum

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

Bu işe yaramıyor çünkü bu Kriterlere uyan satırlar çok, benim benzersiz sonucum burada sanırım sorun. Bunu, Kriterleri karşılayan tüm satırlar için bir güncelleştirmeye nasıl dönüştürebilirim. HQL sorgusunu kullanmak istemiyorum, bunun yerine Kriterler ile yapıyorum.

cevap

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

Her zaman bu veritabanına çok yakın toplu işlemleri yürütmek ve biz Dolayısıyla toplu işlemler yürütülürken oturumda yük nesneleri önlemek için deneyin, onlar gerekli olmadıkça oturumda güncellenen nesneyi tutmak gerekmez önerilir.

+0

Çalıştığınız için teşekkürler. – ErrorNotFoundException

İlgili konular