Spring @Transactional 在少数情况下不起作用
Spring @Transactional not working in few cases
我的以下服务 class 带有 @Transactional
注释。
@Service
@Transactional
public class MyService {
@Autowired
private SessionFactory sessionFactory;
public Order acceptOrder(Order inputOrder) {
Session session = sessionFactory.openSession();
session.save(inputOrder);
session.close();
return inputOrder ;
}
public Order updateOrder(Order inputOrder) {
Session session = sessionFactory.openSession();
//session.beginTransaction();
if(inputOrder.getOrderStatus().equals("confirmed")) {
EmpAccount empAcc = (EmpAccount)session.get(EmpAccount.class, inputOrder.getEmpId());
double newEmpBal = empAcc.getAvailable_balance() - inputOrder.getOrderAmount();
empAcc.setAvailable_balance(newEmpBal);
System.out.println("new bal"+newEmpBal);
VendorAccount venAcc = (VendorAccount)session.get(VendorAccount.class,inputOrder.getvId());
double newVenBal = venAcc.getBalance() + inputOrder.getOrderAmount();
venAcc.setBalance(newVenBal);
session.update(inputOrder);
// session.getTransaction().commit();
session.close();
}
return inputOrder;
} }
对于 acceptOrder()
,@Transactional
正在工作,我在数据库中创建了一个新行,但是当调用 updateOrder()
时,数据库中没有任何变化被反映出来。
谁能告诉我这是为什么? TIA
正如 M. Deinum 评论的那样,对于 Spring 托管事务,无需打开和关闭 Session
,Session
由 sessionFactory.getCurrentSession()
[=13 提供=]
我的以下服务 class 带有 @Transactional
注释。
@Service
@Transactional
public class MyService {
@Autowired
private SessionFactory sessionFactory;
public Order acceptOrder(Order inputOrder) {
Session session = sessionFactory.openSession();
session.save(inputOrder);
session.close();
return inputOrder ;
}
public Order updateOrder(Order inputOrder) {
Session session = sessionFactory.openSession();
//session.beginTransaction();
if(inputOrder.getOrderStatus().equals("confirmed")) {
EmpAccount empAcc = (EmpAccount)session.get(EmpAccount.class, inputOrder.getEmpId());
double newEmpBal = empAcc.getAvailable_balance() - inputOrder.getOrderAmount();
empAcc.setAvailable_balance(newEmpBal);
System.out.println("new bal"+newEmpBal);
VendorAccount venAcc = (VendorAccount)session.get(VendorAccount.class,inputOrder.getvId());
double newVenBal = venAcc.getBalance() + inputOrder.getOrderAmount();
venAcc.setBalance(newVenBal);
session.update(inputOrder);
// session.getTransaction().commit();
session.close();
}
return inputOrder;
} }
对于 acceptOrder()
,@Transactional
正在工作,我在数据库中创建了一个新行,但是当调用 updateOrder()
时,数据库中没有任何变化被反映出来。
谁能告诉我这是为什么? TIA
正如 M. Deinum 评论的那样,对于 Spring 托管事务,无需打开和关闭 Session
,Session
由 sessionFactory.getCurrentSession()
[=13 提供=]