当前位置: 首页 > 知识库问答 >
问题:

HIbernate:找到多个具有给定标识符的行

仇迪
2023-03-14
@Override
    public Application getApplicationForId(Long applicationId) {

        List<Application> applications = executeNamedQuery("applicationById", Application.class, applicationId);
        return applications.isEmpty() ? null : applications.get(0);
    }

在eclipse中调试时

退回申请。isEmpty()?空:应用程序。得到(0);

这些表达式被计算为

applications.is空()-

应用。获取(0)-

应用。大小()-

但在执行这一行之后,它的抛出错误

组织。冬眠HibernateeException:找到了多个具有给定标识符的行:263536,

即使它的大小显示为1,那么它为什么以及如何在执行后获得多行。

共有2个答案

能烨华
2023-03-14

在我的例子中,问题是,当执行在事务的中间时进行调试时,可能是在执行本身的中间被服务并强制停止服务器的目的,因为这已经强制停止了服务器,这不会导致事务回滚,并最终导致数据库中的数据变脏或损坏,因为在终止服务器之前,一些数据可能会被插入到数据库中(primarykey的自动增量的可能性)。重置表主键的自动增量值,解决了该问题。

1.用脏数据标识表(参考堆栈跟踪)

2.对列进行排序(主键),检查列中的最高值(比如somevalue)。

3.使用命令

ALTER TABLE tablename AUTO_INCREMENT = somevalue+1
艾翼
2023-03-14

我很确定这是由于急切的追求。因此,检查您的实体并删除finch=FetchType。EAGER.

实际上,这并不是因为数据库中的行重复造成的,因为显然不可能有重复的主键。相反,这是由Hibernate查找一个对象并急切地填充一段关系引起的。Hibernate假设返回一行,但返回两行是因为有两个对象与该关系关联。

 类似资料:
  • 当我尝试使用findById()方法从数据库中获取单个记录时,或者当我尝试使用spring数据REST更新一篇文章时,我遇到了一个异常:找到了具有给定标识符的不止一行。 delete和findAll方法正常工作。 我已经检查了数据库,没有多个相同ID的记录。另外,id是数据库中的唯一键。我见过很多人有同样的错误,但这些人的问题是他们在哪里使用联接。我没有任何加入。 该实体: 存储库: 例外情况:

  • 当我尝试使用findById()方法从数据库中获取单个记录时,或者当我尝试使用spring数据REST更新一篇文章时,我遇到了一个异常:找到了具有给定标识符的不止一行。 delete和findAll方法正常工作。 我已经检查了数据库,没有多个相同ID的记录。另外,id是数据库中的唯一键。我见过很多人有同样的错误,但这些人的问题是他们在哪里使用联接。我没有任何加入。 该实体: 存储库: 例外情况:

  • 我在我的spring boot应用程序中出现了这个错误。当我想调用这个存储库时,我遇到了这个错误 这是我的存储库: 这就是我称之为此方法的地方: 如何检查方法返回的结果?我调试了我的代码,但在断点它只是返回这个错误。 谢谢你的帮助。

  • 我正在开发EJB-JPA-JSF项目。但是我有一个问题。我得到这个查询的错误: 如何修复此错误

  • 我在使用spring数据从1对1关系btn表检索数据时遇到了一个问题。我已经回顾了平台上的几个解决方案,但奇怪的是,在问题首次出现之前,我已经实现了所有建议的解决方案。请帮助我找到我所缺少的东西,或是使对他人有用的解决方案对我无效的任何东西。 以下是这两个实体之间的关系 错误消息: 2021-12-23 15:02:42.116错误11144---[nio-8089-exec-5]o.a.c.c.

  • 我有一个实体:与实体:之间的关系如下: QueryParameter实体: HtmlElement实体: 组件实体: 类型实体: 基本上,这里的关系意味着一个html元素有一个与其相关的组件。 现在,当我想要找到如下所示的所有组件时: 它给出了以下错误: 如果我运行生成的查询,它将返回3行,但这没有任何意义,因为Component有不同的html组件(input、select等),并且HtmlEl