Я использую БД Firebird в своем проекте, а мои хранимые процедуры в БД используют пользовательские контекстные переменные , которые находятся в области транзакции.
Так что я должен установить некоторые переменные в контексте в начале каждой транзакции. Как реализовать это, не повторяя код в каждом аннотированном методе @Transactional?
Пример:
-Controller
@RestController
@RequestMapping({TBL_EMPLOYEE, TBL_EMP})
public class EmployeeController extends EmployeeCommonController<Employee> {
@GetMapping(PATH_LASTLOGIN)
public List<UserLastLoginWrapper> getUserLastLoginWrapper(Long userid, tring appname) {
return getService().getUserLastLoginWrapper(userid, appname);
}
}
-
Сервис
@Transactional
public class EmployeeService{
public List<UserLastLoginWrapper> getUserLastLoginWrapper(Long userid, String appname) {
return ((EmployeeRepository) getRepository()).getUserLastLoginWrapper(null, userid, appname);
}
}
-
Repository
@NamedNativeQuery(name = "Employee.getUserLastLoginWrapper", query = "select * from SP_USER_LAST_LOGIN(:userid, :appname)", resultSetMapping = UserLastLoginWrapper.USERLASTLOGINWRAPPER)
Большинство хранимых процедур пытаются получить информацию об отеле из контекстных переменных, поэтому мне приходится вызывать execute procedure SP_CTX_SET_LOGIN_INFO(:hotelrefno, :userid)
процедуру в начале каждой транзакции.