2017-03-20 5 views
1

Ich habe ein einfaches Hibernate-Programm mit HQL geschrieben. Ich hatte sowohl SELECT als auch UPDATE darin eingefügt. Wenn ich Datensätze aktualisiere und versuche, sie anzuzeigen, werden die alten Datensätze zurückgegeben. Ich bin die Transaktion nach UPDATE verpflichtet, aber es holt immer noch die alten Aufzeichnungen. Wenn ich eine neue Sitzung für SELECT aufgenommen habe, dann hole ich die neuen Datensätze, die aktualisiert wurden. Muss ich jedes Mal eine neue Sitzung erstellen, um die neuesten Datensätze abzurufen?Abrufen alter Datensätze

AppMain.class: 
    package com.HQL.Main; 

    import java.util.List; 

    import org.hibernate.Query; 
    import org.hibernate.Session; 
    import org.hibernate.SessionFactory; 
    import org.hibernate.Transaction; 
    import org.hibernate.cfg.Configuration; 

    import com.HQL.Model.Employee; 

    public class AppMain { 

     public static void main(String[] args) { 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      Session session = sessionFactory.openSession(); 
      Transaction tx = session.beginTransaction(); 
      Query query = null; 
      List<Employee> list1 = null; 

      query = session.createQuery("from Employee"); 
      list1 = query.list(); 
      for (Employee emp : list1) { 
       System.out.println("\nEmployee ID:\t" + emp.getId() + "\nEmployee name:\t" + emp.getName() 
         + "\nEmployee Age:\t" + emp.getAge() + "\nEmployee Salary:" + emp.getSalary()); 
      } 

      query = session.createQuery("update Employee set age=:empname where id=:eid"); 
      query.setParameter("empname",36); 
      query.setParameter("eid",3); 
      int result = query.executeUpdate(); 
      System.out.println("Result:"+result); 
      tx.commit(); 

      session = sessionFactory.openSession(); 
      Query query1 = session.createQuery("from Employee"); 
      list1 = query1.list(); 
      for (Employee emp : list1) { 
       System.out.println("\nEmployee ID:\t" + emp.getId() + "\nEmployee name:\t" + emp.getName() 
         + "\nEmployee Age:\t" + emp.getAge() + "\nEmployee Salary:" + emp.getSalary()); 
      }  
      //tx.commit(); 
      session.close(); 
      sessionFactory.close(); 
     } 
    } 

Antwort

0

Versuchen session.flush(); und session.clear();

Spülen der Sitzung Kräfte mit Hibernate die In-Memory-Zustand der Session mit der Datenbank

Klar völlig klar, dass die Sitzung zu synchronisieren. Es entfernt alle geladenen Objekte und bricht alle ausstehenden Operationen ab und löscht Caches für alle Objekte.

Nach try Spülung aktualisieren und abzurufen, wie

 int result = query.executeUpdate(); 
     System.out.println("Result:"+result); 
     tx.commit(); 
     session.flush(); 
     session.clear(); 

oder

auch versuchen, mit Session.refresh(Object)

Diese Arbeit sollte

Weitere Informationen über https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html

+0

Ich habe Sitzung enthalten. flush() in meinen Code, aber sti ll es dauert die alten Aufzeichnungen während der Anzeige. –

+0

Versuchen Sie nach dem Flush die gleiche Sitzung zu verwenden, anstatt eine weitere Sitzung zu starten. –

+0

Ja, ich habe die Sitzung verwendet. –

Verwandte Themen