我有一个用户实体,其审核字段名为lastUpdatedUserId
(与 相同LastModifiedBy
)。这是一个整数字段。我正在尝试使用 Spring 提供的审核功能并执行文档中所述的所有操作。当我尝试重写getCurrentAuditor
的方法时AuditorAware
,如果我硬编码一个整数作为返回值,它就可以正常工作。如果我尝试使用UserRepository
(Spring Data JPA 存储库)获取已登录用户的用户 ID,则会收到错误Could not commit JPA transaction
。我正在使用 Gmail Oauth2 进行身份验证。堆栈跟踪太长,我无法在这里发布。我尝试调试,但这并不容易。
如果有人知道原因,请告诉我。
@EntityListeners(AuditingEntityListener.class)
public class User {
@LastModifiedBy
@Column(name = "lst_updtd_usr_id")
private Integer lastUpdatedUserId;
...
}
public class AuditorAwareImpl implements AuditorAware<Integer> {
@Autowired
private UserRepository userRepo;
@Override
public Optional<Integer> getCurrentAuditor() {
// your custom logic
DefaultOidcUser oidcUser = (DefaultOidcUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String emailId = oidcUser.getEmail();
User user = userRepo.findByEmailId(emailId);
return Optional.of(user.getUserId());
}
}
@Configuration
@EnableJpaAuditing(auditorAwareRef="auditorP")
public class PersistenceConfig {
@Bean
AuditorAware<Integer> auditorP() {
return new AuditorAwareImpl();
}
}