Как реализовать пессимистическую блокировку в приложении SpringBoot (Maven)

Я пытался реализовать пессимистическую блокировку в приложении SpringBoot. Итак, мои вопросы:

  1. Нужно ли добавлять persistence.xml или можно добавить все в pom.xml, если да, то как?
  2. Если мне нужно добавить persistence.xml, как это должно выглядеть? Я попробовал этот подход и продолжаю получать сообщение об ошибке: "Эта конфигурация запрещает оптимизацию во время выполнения, но следующие перечисленные типы не были улучшены во время сборки или во время загрузки класса с javaagent:.... "

Ранее я реализовал оптимистическую блокировку, и все, что я добавил, это @Version и еще несколько строк. Почему пессимистическая блокировка сложна? Я делаю что-то неправильно?

Это мои зависимости

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.6.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
        </dependency>
</dependencies>

А это из Сервиса

  @Autowired
  EntityManager em;


  @Transactional
    public Reservation createReservation(ReservationDTO reservationDTO) {
    ........
    ........
    for (String id : ids) {
            Table table = em.find(Table.class, Long.parseLong(id));
            em.lock(table, LockModeType.PESSIMISTIC_WRITE); 
            em.refresh(table);
            tableRepository.save(table);
    .........

И это из контроллера

    .......    
    try {
         Reservation reservation = reservationService.createReservation(reservationDTO);
         if (reservation == null){
              return new ResponseEntity(HttpStatus.BAD_REQUEST);
         }
         emailService.sendMailInvite(reservation, guest);
         return new ResponseEntity(HttpStatus.OK);
    }catch (PessimisticLockException e){
         return new ResponseEntity(HttpStatus.BAD_REQUEST);
    }
    .......

Спасибо!

0 ответов

Другие вопросы по тегам