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,