在hibernate中更新会话

时间:2014-11-04 22:28:59

标签: hibernate

所以我使用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 个答案:

答案 0 :(得分:2)

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