В веб-приложении 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 и попробовать?