Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 调试@Lock-in-Spring数据JPA_Hibernate_Spring Boot_Logging_Spring Data Jpa_Locking - Fatal编程技术网

Hibernate 调试@Lock-in-Spring数据JPA

Hibernate 调试@Lock-in-Spring数据JPA,hibernate,spring-boot,logging,spring-data-jpa,locking,Hibernate,Spring Boot,Logging,Spring Data Jpa,Locking,在Spring Data JPA中,当我将@namedquerys与lockMode=LockModeType.WRITE一起使用时,我可以在日志中看到结果(假设JPA.show sql为true): 但是,当我在方法上使用@Lock(LockModeType.WRITE)注释时,我在日志中看不到任何内容。我想确保锁定机制按预期工作 我如何才能看到@Lock(LockModeType.WRITE)正在工作?应该启用什么日志级别 编辑:以下是我的代码摘录: @Service public cla

在Spring Data JPA中,当我将
@namedquerys
lockMode=LockModeType.WRITE一起使用时,我可以在日志中看到结果(假设
JPA.show sql
true
):

但是,当我在方法上使用
@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;
    }
}

您使用了错误的
LockModeType
LockModeType.WRITE
LockModeType.OPTIMISTIC\u FORCE\u imrement的同义词

@Lock(LockModeType.PESSIMISTIC_WRITE)
您还可以从服务方法中删除
@Lock
,因为
@Lock
只对存储库方法有效。将
@Transactional
添加到相应的服务方法中也很重要

在此处阅读有关锁定模式的更多信息


要确保:您已将此注释设置为JpaRepository中的查询方法?@SimonMartinelli:我在JpaRepository中的方法上设置了
@Lock
。另外,我还尝试在使用存储库的
@Service
中的一个方法上设置它(只是出于好奇);请看编辑后的问题。我添加了代码的摘录。它实际上试图通过用户的电子邮件、(常规)密码和验证码对用户进行身份验证。如果一切正常,则在数据库中设置最后一个验证码。我想锁定一个用户对应的行,这样就不会有两个线程(事务)同时读写它。非常感谢。以下是来自Java EE 8的
LockModeType
文档,供将来参考:
@Lock(LockModeType.PESSIMISTIC_WRITE)