Прослушиватель событий PreInsert и PreUpdate в спящем режиме
я использовалPreInsertEventListener
а такжеPreInsertEventListener
Прослушиватель событий для вставки созданной даты и обновленной даты в таблицу.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я сохраняю сущность в базе данных, дата создания не может быть вставлена в таблицу, как при вставке обновленной даты во время записи обновления, она также не будет вставлять обновленную дату.
Мой пример кода показан ниже:
Класс слушателя:
public class PreInsertListener implements PreInsertEventListener,
PreUpdateEventListener
{
@Override
public boolean onPreInsert(PreInsertEvent arg0) {
City.class.cast(arg0.getEntity()).setCreated_date(new Date());
return false;
}
@Override
public boolean onPreUpdate(PreUpdateEvent arg0) {
System.out.println("Update event......");
City.class.cast(arg0.getEntity()).setUpdated_date(new Date());
return false;
}
}
Класс Hibernate Connection: {
public class HibernateUtil
private static final SessionFactory sessionFactory;
static {
try {
AnnotationConfiguration config = new AnnotationConfiguration();
config.setListener("pre-insert", new PreInsertListener());
config.setListener("pre-update", new PreInsertListener());
sessionFactory = config.configure().buildSessionFactory();;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Метод сохранения и обновления объекта в DAO:
public Long saveCity(String cityName)
{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
Long cityId = null;
try {
transaction = session.beginTransaction();
City city = new City();
city.setName(cityName);
cityId = (Long) session.save(city);
//session.flush();
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
return cityId;
}
public void updateCity(Long cityId, String cityName)
{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
City city = (City) session.get(City.class, cityId);
city.setName(cityName);
session.update(city);
//session.flush();
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
Мой тестовый класс:
public class Main
{
public static void main(String[] args) {
CityDAO cityDAO = new CityDAO();
long cityId1 = cityDAO.saveCity("New York");
cityDAO.updateCity(cityId1, "Paris");
}
}
Если бы я использовалsession.flush()
затем он вставит дату создания и обновления, но каждый раз, когда я вызываю метод flush, выполняется обновленный запрос. В настоящее время я прокомментировал код для вызоваsession.flush()
метод, как показано в коде.
Каково решение этой проблемы?