Прослушиватель событий 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() метод, как показано в коде.

Каково решение этой проблемы?

Ответы на вопрос(3)

Ваш ответ на вопрос