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

MySQL:org。冬眠HibernateeException:找到多个具有给定标识符的行3

常业
2023-03-14

我有两张桌子,两张桌子之间有一对一的关系。

A表中的

@Entity
public class A implements GrantedAuthority {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer aId;

    @NotEmpty
    @Column(unique = true, nullable = false)
    private String name;

    @JsonIgnore
    @OneToOne(mappedBy = "a", targetEntity = B.class, fetch = FetchType.LAZY)
    private B b;

    getter and setter

用户表:

@Entity
@Table
public class B {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Column(columnDefinition = "VARCHAR(50)")
    private String bUUId;

    @Column(unique = true, columnDefinition = "VARCHAR(30)", nullable = false)
    private String name;

    @Column(columnDefinition = "VARCHAR(50)", nullable = false)
    private String x;

    @JsonIgnore
    @OneToOne(targetEntity = A.class, fetch = FetchType.EAGER)
    @JoinColumn(name = "aId", referencedColumnName = "aId")
    private A a;

    //don't save this value into DB
    @Transient
    private Set<A> aSet;

我称之为询问

@Override
public B findByBname(String name) {

    String query = "FROM B b WHERE b.name = :name";
    try {
        return (B) entityManager.createQuery(query).setParameter("name",name).getSingleResult();
    } catch (SecurityException | IllegalStateException | RollbackException e) {
        LOGGER.info(e.getMessage());

和错误日志:

org.springframework.orm.jpa.JpaSystemException: More than one row with the given identifier was found: 3, for class: com.z.server.model.B; nested exception is org.hibernate.HibernateException: More than one row with the given identifier was found: 3, for class: com.z.server.model.B
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:310)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:221)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy86.findBBname(Unknown Source)
    at com.z.server.controller.BController.findB(BController.java:64)

当我在数据库中有一个带有这个Bname的条目时,我得到了这个执行选项。

有人有什么想法吗

干杯

共有1个答案

甄阳朔
2023-03-14

您正在调用getSingleResult(),这意味着您的查询只需要一个结果:

FROM B b WHERE b.name = :name

似乎有多行在表的“名称”列下具有相同的值。

如果List对象返回多行,则可以调用getResultList()来获取List对象。或者必须确保表中的数据不包含名称列下的重复值。

 类似资料:
  • 组织。冬眠HibernateeException:找到了多个具有给定标识符的行:578,用于类:com。冬眠查询表演坚持不懈模型百货商店 数据库没有标识符为578的重复存储行。使用SQL对其进行了检查: 它返回0条记录。 关于一、二的其他问题指出,问题可能与OneToOne映射本身有关。商店和员工实体具有OneToOne关系,我的映射如下: 工作人员: 商店: 如何修复它? 更新: 当查询被修改为

  • 我有两个实体,由单向连接OneTo很多: 当我试图用汽车创造我的司机时,像这样 ENVERS创建: 驱动程序表中包含新驱动程序数据的行,//例如,ID=1 包含新车数据的CAR表中的一行,//例如,ID=3 修订实体表中的一行,//例如,ID=8 驱动程序中的一行\u AUD: 一辆车有两排: 所以当我试图修改ID=1的驱动程序时 我得到了HibernateException,因为有两行具有相同的

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

  • 我有一个实体A,它与TempA实体有关系,如下所示: 然后在doInHibernate我称之为 然后我收到了错误。TempA是一个共享表,因此其他服务可以实际插入该表。我需要的是防止冬眠者称之为TempA。我能够阻止它与A进行左连接,但是,它仍然会导致这个错误。

  • 我在使用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