Поток безопасно удалить весной данных jpa - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь смоделировать ошибку OptimisticLockException, создав два потока и удалив одинаковые записи в обоих. Я прочитал несколько блогов, но не смог найти, как правильно обработать эту ошибку или какой-либо механизм, чтобы повторить неудачную операцию.

Если я удаляю версию, код аннотации работает отлично. Я не уверен, насколько pessimisticLocking снизит производительность в большой кодовой базе.

Вот часть моего кода.

        @Entity
        public class Person {
            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private Integer id;

            @Version
            private long version;

            @Column(name="first_name", nullable=false)
            private String firstName;

            @Column(name = "last_name", nullable = false)
            private String lastName;

            @Column(name = "ssn", nullable = false, unique = true)
            private int ssn;
        }

        public class PersonService{
            @Autowired
            PersonRepository repo;

            @Autowired
            EntityManager em;


            public void save(Person person) {
                repo.save(person);
            }

            @Transactional
            public void delete(Person p) {
                System.out.println("Deleting Person" + p);
                repo.delete(p);
            }
        }    

        public class Main {
            public static void main(String[] args){
            Person p = new Person("A", "B");
            try {
                Thread thread1 = new Thread(() ->  {
                    repo.delete(p);
                });

                Thread thread2 = new Thread(() ->  {
                    repo.delete(p);
                });

                thread1.start();

                thread2.start();

                thread1.join();
                thread2.join();
                }catch(Exception ex) {
                    System.out.println("Exception in thread");
                }
            }
          }
      }

Этот блок catch никогда не вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...