Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@Transactional methods in @Controller class are not considred as transactional

I noticed that the following is not working in a class marked as a @Controller:

@Autowired
SessionFactory sessionFactory;

@ResponseBody
@Transactional
@RequestMapping(method = RequestMethod.GET , value = "/map")

public ArrayList<PhotoDTO> getPhotos(...someParams) {
   Entity result sessionFactory.getCurrentSession()... //do some manipulation

  return result;
}

when I call the URL, I get an error saying that the method is not transactional (although, as you can see, it is marked as one)

If I copy this method to a another class called MyService and call it from the controller instead, it works perfectly

Is this some sort of a Spring advice (a conspiracy to make me use more classes more or less)?

like image 964
Preslav Rachev Avatar asked Dec 02 '25 05:12

Preslav Rachev


1 Answers

Don't do transactions in your controller. Put them in your service layer classes.

Separate your code into model-view-controller.

Yes it is a conspiracy. It enables to you to share code between controllers/views without repeating code. And also stops rollbacks of transactions unnecessarily (for exceptions unrelated to the actual transaction).

It might seem like more code to begin with, but in the long run it is much more manageable and simpler to develop.

like image 154
NimChimpsky Avatar answered Dec 03 '25 20:12

NimChimpsky



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!