2014-11-04 153 views
0

所以我使用Hibernate在列表中從我的數據庫獲取的行數:更新會話

public class FlightDAOImpl implements FlightDAO { 

    private Session session = HibernateUtil.getSessionFactory().openSession(); 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<Flight> listFlight() { 
     List<Flight> list = new ArrayList<>(); 
     session.beginTransaction(); 
     list = session.createQuery("FROM Flight WHERE Flight_Origin = :origin_id OR Flight_Destination = :destination_id") 
       .setParameter("origin_id", App.airport.getAirportId()) 
       .setParameter("destination_id", App.airport.getAirportId()) 
       .list(); 
     session.getTransaction().commit(); 
     return list; 
    } 
} 

它的工作原理,但我如果我更新表中的一些數據(來自像SQL開發人員)會話將不會更新我將在下次調用listFlight()時獲得相同的數據。 我可以用這個來代替:

public List<Flight> listFlight() {   
    List<Flight> list = new ArrayList<>(); 
    Session s = HibernateUtil.getSessionFactory().openSession(); 
    s.beginTransaction(); 
    list = s.createQuery("FROM Flight WHERE Flight_Origin = :origin_id OR Flight_Destination = :destination_id") 
    .setParameter("origin_id", App.airport.getAirportId()) 
    .setParameter("destination_id", App.airport.getAirportId()) 
    .list(); 
    s.getTransaction().commit(); 
    s.close(); 
    return list;  
} 

,但將要求我關閉會話,每次打開它時調用listFlight()。有沒有辦法強制更新整個會話數據而不關閉並重新打開它?我是一個新手,所以任何意見將不勝感激。

+1

使用getCurrentSession()而不是openSession()。 – 2014-11-05 06:17:13

+0

@Sachin Verma非常感謝你,這正是我想要的:) – Lexx 2014-11-05 10:55:27

+0

@SachinVerma你可以發表你的評論作爲答案。 – 2014-11-06 17:30:49

回答

2

使用getCurrentSession()而不是openSession()。