Как сделать фиксацию базы данных из аннотированного метода @transactional - PullRequest
0 голосов
/ 14 февраля 2019

В веб-приложении Java Spring MVC у меня есть конфигурация на основе аннотаций.У меня есть метод класса обслуживания, который получает список объектов из базы данных, а затем обновляет каждый объект и затем сохраняет его обратно.Методы аналогичны следующим:

@Transactional
public void updateSchools()
{
    List<CbSchoolTO> schoolList = CbSchoolDao.getSchoolsByExpiryDate(date);
    for (CbSchool cbSchool : schoolList) 
    {
        updateSchool(cbSchool);
    }
}

@Transactional
public void updateSchool(CbSchool cbSchool)
{
    //perform the operation
}

Из метода **updateSchool** будет вызван метод dao, который сохранит обновления следующим образом:

public void saveOrUpdateSchool(CbSchool cbSchool) throws HibernateException 
{
    getCurrentSession().saveOrUpdate(school);
}

Теперь я пытаюсь выполнить фиксацию базы данных для каждой школы при обновлении, а не ждать завершения всей транзакции.
Один из найденных вариантов - не помещатьметод, который обновил отдельную школу в рамках общей транзакции.Но если я уберу @transactional из моего первого метода, который должен получить список школ, я получу исключение: No hibernate session bound to thread.Мой метод дао, который перечисляет школы, выглядит следующим образом:

public List<CbSchool> getSchoolsByExpiryDate(Date currentDate) throws HibernateException
{
    Query query = getCurrentSession().createQuery("FROM CbrainSchoolTO WHERE endDate < :currentDate 
    query.setParameter("currentDate", currentDate);
    List<CbSchool> resultList = query.list();
    if (resultList != null && !resultList.isEmpty())
    {
        return resultList;
    }
    return null;

Как сделать коммит после каждого обновления вместо ожидания целого пакета с моей текущей конфигурацией.

Я также обнаружил следующееКод для создания транзакции вручную:

Transaction tx = HibernateUtil.getCurrentSession().beginTransaction(); 
//readonly operation here
tx.commit()

Но я не могу импортировать HibernateUtil.Моя зависимость maven для hibernate:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>3.5.1-Final</version>
</dependency>

Должен ли я изменить версию hibernate и попробовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...