У меня есть следующие логи c:
public ViewedPost create(ViewedPostDto resource) {
ViewedPost lookup = findByUserIdAndPostId(resource.getUserId(), resource.getPostId());
if (lookup != null) {
throw new ConflictException("Post with id " + resource.getPostId() + " is already viewed by user " + resource.getUserId() + ".");
}
Post post = postService.findOne(resource.getPostId());
User user = userService.findOne(resource.getUserId());
if (user == null) {
throw new BadRequestException(
"Failed to view Post: userId " + resource.getUserId() + " does not belong to a User.");
}
logger.info("Take me out");
if (post == null) {
throw new BadRequestException(
"Failed to view Post: postId " + resource.getPostId() + " does not belong to a Post.");
} else {
postService.incrementViewCount(post.getId(), 1);
}
ViewedPost vp = new ViewedPost();
vp.setPost(post);
vp.setUser(user);
ViewedPost created = create(vp);
return created;
}
Этот метод часто вызывается за короткий промежуток времени, и часто возникают запросы на создание дублирующих запросов. Я часто вижу что-то подобное в своих журналах и заметил, что создаются дубликаты.
21:18:56.450 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 400 is already viewed by user 342.
21:18:56.484 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 402 is already viewed by user 342.
21:18:56.489 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 399 is already viewed by user 342.
21:18:56.504 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 401 is already viewed by user 342.
21:18:56.508 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 398 is already viewed by user 342.
21:18:56.513 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 390 is already viewed by user 342.
21:18:56.517 [http-nio-5000-exec-10] INFO c.m.w.s.impl.ViewedPostServiceImpl - Post with id 389 is already viewed by user 342.
21:18:56.523 [http-nio-5000-exec-10] WARN c.m.c.w.RestResponseEntityExceptionHandler - Conflict: query did not return a unique result: 4; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 4
Может кто-нибудь сказать мне, как я могу предотвратить создание этих дубликатов, даже если я проверяю начальный поиск. Кажется, что куча создается нормально, а затем сталкивается с дубликатом, пробирающимся через