如何在@transactional带注释的方法中进行数据库提交

时间:2019-02-14 10:36:34

标签: spring-mvc transactions

在Java Spring MVC Web应用程序中,我具有基于注释的配置。我有一个服务类方法,该方法从数据库中获取对象列表,然后更新每个对象,然后将其保存回去。方法与以下类似:

@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。 我列出学校的dao方法如下:

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依赖是:

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

我应该更改休眠版本并尝试吗?

0 个答案:

没有答案