Организация транзакций с помощью Spring в несколько репозиториев

260
31 июля 2017, 11:58

Существует несколько репозиториев, в которые необходимо записать данные, в случае неудачи - откатить изменения.

@RestController
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public class PlayerRegistrationController {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
@Autowired
private PlayerRepository playerRepository;
@Autowired
private SessionRepository sessionRepository;
@Autowired
private ResourseRepository resourseRepository;
@Autowired
private PlayerResourseRepository playerResourseRepository;
@Autowired
private PlayerRoomRepository playerRoomRepository;
@Autowired
private PlayerStatsRepository playerStatsRepository;
@RequestMapping(value = "/signup", produces = { "application/json; charset=UTF-8" }, method = RequestMethod.POST)
public ResponseEntity<? extends Response> singUp(HttpServletRequest request, @RequestBody String jsonString, BindingResult bindingResult) throws ClassNotFoundException {
    ...
    String sessionId;
    try{
        sessionId = saveSingUpData(player, request);
    } catch (Exception e){
        RegistrationResponse regResponse = new RegistrationResponse((long)2);
        return new ResponseEntity<RegistrationResponse>(regResponse, HttpStatus.OK);
    }
    return new ResponseEntity<RegistrationResponse>((new RegistrationResponse(((long)0),sessionId)), HttpStatus.OK);
}
@Transactional
public String saveSingUpData(Player player, HttpServletRequest request) throws Exception {
    playerRepository.save(player);
    player = playerRepository.findByLogin(player.getLogin());
    Session session = new Session(player.getIdPlayer(), request.getSession().getId());
    sessionRepository.save(session);
    List<Resourse> resourse = resourseRepository.findAll();
    for (Resourse i : resourse) {
        PlayerResourse playerResourse = new PlayerResourse(player.getIdPlayer(), i.getIdResourse(), 0, 0);
        if (playerResourse.getResourse() == 1) {
            playerResourse.setValue(10000);
        } else if (playerResourse.getResourse() == 3) {
            playerResourse.setValue(20);
        }
        playerResourseRepository.save(playerResourse);
    }
    PlayerStats playerStats = new PlayerStats(player.getIdPlayer(),request.getRemoteAddr(),(byte)1);
    playerStatsRepository.save(playerStats);
    PlayerRoom playerRoom = new PlayerRoom(player.getIdPlayer(),1, (byte)0, 1);
    playerRoomRepository.save(playerRoom);
    return  session.getSessionId();
}
}

Что необходимо добавить/изменить, чтобы аннотация @Transactional работала?

READ ALSO
Передача картинки по bluetooth

Передача картинки по bluetooth

Пишу приложение для Android, которое принимает данные по bluetooth(картинку jpg), для тестирования использую программу HTerm и bluetooth передатчикПроблема...

295
Помогите разобраться с JSON

Помогите разобраться с JSON

С JSON особо не знаком, но хочу попробовать решить задачу с помощью негоТакая проблема, есть URL на данные, данные выглядят примерно так:

302
Android - как узнать создался ли элемент

Android - как узнать создался ли элемент

Динамический создаю кнопку, как мне узнать что кнопка создана? Точнее, мне нужно условие (пока кнопка не создана) не делать того-то?

313