Отладка @Lock в Spring Data JPA - PullRequest
       10

Отладка @Lock в Spring Data JPA

0 голосов
/ 05 января 2019

В Spring Data JPA, когда я использую @NamedQueries с lockMode = LockModeType.WRITE, я вижу результаты в журналах (при условии jpa.show-sql равно true):

... SELECT ... FOR UPDATE

Однако, когда я использую аннотацию @Lock(LockModeType.WRITE) для метода, я ничего не вижу в журналах. Я хочу убедиться, что механизм блокировки работает как положено.

Как я могу увидеть, что @Lock(LockModeType.WRITE) работает? Какой уровень журнала должен быть включен?


РЕДАКТИРОВАТЬ: Вот выдержка из моего кода:

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Transactional
    public User checkCredentials(String email, String password, String verificationCode)
            throws BadCredentialsException {

        User user = userRepository.findByEmail(email);
        if(user == null)
            throw new BadCredentialsException("Invalid username");

        ...

        user.setLastVerificationCode(verificationCode);
        userRepository.save(user);

        return user;
    }
}

1 Ответ

0 голосов
/ 07 января 2019

Вы использовали неправильно LockModeType: LockModeType.WRITE является синонимом LockModeType.OPTIMISTIC_FORCE_IMCREMENT

@Lock(LockModeType.PESSIMISTIC_WRITE)

И вы можете удалить @Lock из вашего метода службы, потому что @Lock работает только с хранилищем методов. Также важно добавить @Transactional к соответствующим сервисным методам.

Подробнее о LockModes здесь

https://docs.oracle.com/javaee/7/api/javax/persistence/LockModeType.html

...