Spring @Transactional не работает в нескольких случаях - PullRequest
0 голосов
/ 30 октября 2018

Мой следующий класс обслуживания помечен @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(), изменения в дБ не отражаются.

Может кто-нибудь сказать мне, почему это? ТИА

1 Ответ

0 голосов
/ 05 ноября 2018

Как прокомментировал М. Дейнм, для транзакций, управляемых Spring, нет необходимости открывать и закрывать Session, Session обеспечивается sessionFactory.getCurrentSession()

...