I have Spring Controller for saving data to database, and this method generating receiptNo (the receiptNo value is generated using some database field value) for example: xxx/ddMMyy/compId.
where xxx is select max(substr("receiptNo")) from table, and compId is from the session. After receiptNo is generated, then the value will be saved to another table.
my Controller is:
@Controller
public class foo{
private Object LOCK_OBJECT = new Object();
@RequestMapping(value = "/generateAndSave", method = RequestMethod.POST)
public ModelAndView generateAndSave(@ModelAttribute("tform") TempForm tform, HttpServletRequest request) {
// Some Logic
synchronized (LOCK_OBJECT) {
String max = doGetMax(tform);
SomePojo domain = doGenerate(max, compId);
doStore(domain);
}
modelAndView.addObject("key", "value");
return modelAndView;
}
}
My Question is, Should i use synchronized (LOCK_OBJECT) { } block for ensuring unique receiptNo?
My concern is on xxx value, if i not use synchronized (LOCK_OBJECT) { } block, some user will get same xxx value.
Please Advise,