Spring @Transactional在某些情况下不起作用

时间:2018-10-30 09:13:22

标签: spring hibernate spring-transactions transactional

我的以下服务类别带有@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在工作,并且我在db中创建了新行,但是当调用updateOrder()时,不会反映db中的更改。

有人可以告诉我这是为什么吗? TIA

1 个答案:

答案 0 :(得分:0)

正如M. Deinum所评论的那样,对于Spring管理的事务,Session不需要打开和关闭SessionsessionFactory.getCurrentSession()