大家好,我正在使用mysql的SpringBoot。我在查找信息时出现以下错误,
javax.persistence.ununiqueresultexception:查询未返回唯一结果:2
在我的repository类中,我有以下代码,
可选findbyidoremail(整数id,字符串电子邮件);
我认为错误是因为 findByIdOrEmail
正在获取多条记录,因为 OR
接线员。
所以我用了一个 List
下面是我的代码,我的目标是抛出一个异常,该异常专门显示每个重复的值。
List<User> userList = userRepo.findByIdOrEmail(user.getId(), user.getEmail());
// There will be maximum of 2 records fetched by id and email and I didn't
check if each result is the users record
if (!userList.isEmpty() && userList.size() > 1)
throw new CustomException("Duplicate Record Found" +
" id: " + user.getId() + " and email: " + user.getEmail());
else if (!userList.isEmpty())
throw new CustomException("Duplicate Record Found" +
(userList.get(0).getId().equals(user.getId()) ? "id: " + user.getId() : "email: " + user.getEmail()));
所以我想知道这种方法是最好的还是有其他的最佳实践?因为用户应该能够更新他/她的记录,但检查与现有其他记录的重复。因为它有时会给出一个值列表,所以我必须在循环中检查它们。这是我在上面的代码中没有做过的。那么,有没有其他最好的方法或简单的方法来做到这一点,而不循环和多个if条件?非常感谢您的回答。提前谢谢。
1条答案
按热度按时间y1aodyip1#
让我们创建一个自定义ResourceReadyExistsException类。它将扩展runtimeexception类,您可以向其中添加任意多的参数。我一直这么简洁。
每当我需要检查一个唯一的资源时,我可以告诉用户哪个特定的属性有什么值导致了错误。此外,我还通知用户必须采取什么措施来避免错误。
比方说,我选择使用error***作为我的resourceAreadyExistsException。不过,我还是需要将此错误消息连接到exceptionresponsehandler。额外的方法与我们通常创建的处理所有异常的方法非常相似。事实上,您可以轻松地为所有异常复制粘贴此方法。您所要做的就是将exception类更改为您的exception并更改httpstatus。
.