目前我正在学习“春+休眠”的整合,到目前为止,我正在让它发挥作用。但我遇到了我不想在过程结束时进行交易的情形,因为我只想看到生成的Sql Statement用于测试和调试目的。
我已经把假的添加到我的冬眠属性, 但后来它仍然不起作用。
如果使用 Spring 处理冬眠交易, 是否有可能实现? 因为使用传统的冬眠交易时, 有可能不拨会议电话。 承诺( ) 方法, 所有更新和插入都不会被保存 ;
目前我的服务层有这个代码:
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true) public class 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!!!
*/
时 时
时 时
Dao 层代码 :
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);
时 时
时 时
但这里发生的事情是,它确实进行交易!!但我不想仅仅为了测试和调试目的进行交易。
I ve also tried @Transactional(propagation = Propagation.SUPPORTS, readOnly = false) instead of @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
但这里发生的情况是,它并不进行交易,但雇员的计数也不加薪。
因此,我期待在这里发生的是,在插入到雇员表之前先计算雇员人数。然后插入雇员表,再次计算雇员人数,这样就会增加1。 但是,在程序结束时,我不想承诺插入!
你们有想法的人吗?
I would be very thankful for any help! Thanks!