所以我使用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()时打开它。有没有办法强制更新整个会话数据而不关闭并重新打开它?我是新手,所以任何建议都会受到赞赏。
答案 0 :(得分:2)
使用getCurrentSession()而不是openSession()。