1

我目前正在学习 Spring + Hibernate 的集成,到目前为止我正在让它工作。但是我遇到了不想在流程结束时提交事务的情况,因为我只想查看生成的 sql 语句以进行测试和调试。

我已经在我的休眠属性中添加了 false ,但是它仍然无法正常工作。

如果使用Spring处理休眠事务是否可以实现?因为在 hibernate 中使用传统事务,有可能,只要不调用 session.commit() 方法,所有的更新和插入都不会被保存;

目前我的服务层有这个代码:

@Transactional(propagation = Propagation.SUPPORTS, readOnly = true) 公共类 EmployeeServiceImpl{

@Autowired
private EmployeeDao employeeDao

@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void saveEmployee(Employee employee){

    // count the number of employee in the database
    int n  = employeeDao.getEmployeeCount();
    // lets say it should print 10 here
    System.out.println("number of employee before inserting : " + n);

    // insert to employee
    employeeDao.saveEmployee(employee);

    // then count the employee after inserting
    n  =  employeeDao.getEmployeeCount();

    // then it should print 11 here after inserting new employee
    System.out.println("number of employee after inserting : " + n);

/* Then Dont commit insert!!!
*/

}

}

道层代码:

public EmployeeDaoImpl implements EmployeeDao{

@Autowired
public void saveEmployee(Employee employee){

    sessionFactory.getCurrentSession.save(employee);

}

public int getEmployeeCount(){

    String count = sessionFactory.getCurrentSesion.createQuery("select count(emp.employeeId) from Employee emp")
    .list().get(0).toString;

return Integer.valueOf(count);
}

}

但是这里发生的是它确实提交了事务!但我不想仅仅为了测试和调试目的而提交事务。

我也试过 @Transactional(propagation = Propagation.SUPPORTS, readOnly = false) 而不是 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)

但是这里发生的是它没有提交事务,但是员工的数量也没有增加。

所以,我期望在这里发生的是在插入员工表之前计算员工人数。然后插入员工表并再次计算员工人数,因此它将增加 1。但在流程结束时,我不想提交该插入!

各位大佬有idea吗?

我将非常感谢任何帮助!谢谢!

4

1 回答 1

0

对于测试,请使用Spring 测试框架。它为您处理自动事务回滚。如果您正在寻找其他内容,则必须更具体。你的问题虽然很详细,但对你真正想做的事情却相当模糊。您只是经常使用诸如“测试”和“调试”之类的词。这些词对不同的人可能意味着很多不同的东西。

于 2012-05-28T03:39:12.880 回答