• Как можно на комп установить две IDEA?

    @rick1
    Если не ошибаюсь, то установка по умолчанию обоих версий проходит корректно.
    Стоят обе версии на компьютере.
  • Как запретить одновременный доступ к файлу/ячейке БД?

    @rick1 Автор вопроса
    Сергей Горностаев, спасибо за помощь!

    Сделал так:

    @RequestMapping(value = "/admin/editnote/{id}", method = RequestMethod.GET)
        public String editNoteGet(@PathVariable("id") Long id, Model model){
            model.addAttribute("note", noteService.getById(id));
            model.addAttribute("version", noteService.getById(id).getVersion().toString());
            return "admin/editnote";
        }
    
        @RequestMapping(value = "admin/editnote/{id}", method = RequestMethod.POST)
        public String editNotePost(@PathVariable("id")Long id,
                                   @ModelAttribute("text")String text,
                                   @ModelAttribute("version")String version,
                                   @ModelAttribute("note")Note note){
            note.setCreationDate(noteService.getById(id).getCreationDate());
            note.setUsers(noteService.getById(id).getUsers());
    
            noteService.saveNote(note);
            
            return "redirect:/admin/notelist";
        }


    Может кому пригодится...
    Как-то коряво, но блокировку выполняет.
  • Как запретить одновременный доступ к файлу/ячейке БД?

    @rick1 Автор вопроса
    Сергей Горностаев, я понял, почему, скорее всего.
    @RequestMapping(value = "/admin/editnote/{id}", method = RequestMethod.GET)
        public String editNoteGet(@PathVariable("id") Long id, Model model){
            model.addAttribute("note", noteService.getById(id));
            model.addAttribute("version", noteService.getById(id).getVersion());
    
            return "admin/editnote";
        }
    
        @RequestMapping(value = "admin/editnote/{id}", method = RequestMethod.POST)
        public String editNotePost(@PathVariable("id")Long id,
                               @ModelAttribute("note")String text){
            Note note = noteService.getById(id);
            note.setText(text);
            noteService.saveNote(note);
            noteFileWriter.writeNoteToFileWithFOS(note.getId().toString(), text);
    
            return "redirect:/admin/notelist";
        }


    Для вывода в textArea текущего значение из БД и для сохранения изменений используются разные запросы контроллера.
    И в таком случае, после того, как первый юзер сохранил изменения, они улетели в БД, второй нажимает тоже кнопку сохранить и только после этого начинается процесс взятия начальной версии для второго юзера. И в ходе этой транзакции она уже не изменяется.
  • Как запретить одновременный доступ к файлу/ячейке БД?

    @rick1 Автор вопроса
    Сергей Горностаев, может я тогда не совсем понял...

    У меня есть запись в БД с полем @Version.
    Я открываю в двух браузерах страницу редактирования и редактирую одну ячейку.
    В одном браузере сохраняю, данные заносятся в БД, версия увеличивается на 1.
    Потом нажимаю сохранить во втором браузере и после этого данные снова заносятся в БД и версия снова увеличивается на 1.
    Разве так должно быть?
  • Как запретить одновременный доступ к файлу/ячейке БД?

    @rick1 Автор вопроса
    Сергей Горностаев, Алексей Черемисин, почитал, очень полезная вещь. Спасибо.

    Только правда не понял, где именно настроить эту блокировку.

    Я добавил поле у объекта:
    @Version
        private Long version;


    А вот на что в repository повесить аннотацию @Lock(LockModeType.OPTIMISTIC)?