I have 4 transaction managers in my spring context. Based on some logic I want to invoke the respective transaction manager. How should I do ? For the following code I am getting an exception
java.lang.ClassCastException: org.hibernate.action.internal.DelayedPostInsertIdentifier cannot be cast to java.math.BigInteger
However, if I give a single @Transactional(value = "myservicetransactionManager", propagation = Propagation.REQUIRES_NEW) at the class level it works fine, but only for that scenario. Rest all fail.
@Service
public class MyServiceImpl implements MyService {
@Autowired
MyDao myDao;
@Override
public SomeResponse saveQueryResponseObject(SomeResponse someResponse) {
SomeResponse returnObject = null;
int logicValue = getLogicValue();
switch (logicValue) {
case 0:
returnObject = callforzero(someResponse);
break;
case 1:
returnObject = callforfirst(someResponse);
break;
case 2:
returnObject = callforsecond(someResponse);
break;
case 3:
returnObject = callforthird(someResponse);
break;
}
return returnObject;
}
@Transactional(value = "myservicetransactionManager", propagation = Propagation.REQUIRES_NEW)
private SomeResponse callforzero(SomeResponse someResponse) {
return myDao.saveResponse(someResponse);
}
@Transactional(value = "myservice1transactionManager", propagation = Propagation.REQUIRES_NEW)
private SomeResponse callforfirst(SomeResponse someResponse) {
return myDao.saveResponse(someResponse);
}
@Transactional(value = "myservice2transactionManager", propagation = Propagation.REQUIRES_NEW)
private SomeResponse callforsecond(SomeResponse someResponse) {
return myDao.saveResponse(someResponse);
}
@Transactional(value = "myservice3transactionManager", propagation = Propagation.REQUIRES_NEW)
private SomeResponse callforthird(SomeResponse someResponse) {
return myDao.saveResponse(someResponse);
}
}