问题 修复了Hibernate错误“两次使用相同的实体名称”


如何修复以下Hibernate错误:

什么是“两次使用相同的实体名称”。


9561
2017-10-06 18:22


起源



答案:


当您有多个具有相同类名或显式名称的@Entity时,会发生此异常。 要解决此问题,您必须为每个实体设置不同的显式名称。

错误案例:

package A;

@Entity
class Cell{
 ...   
}


package B;

@Entity
class Cell{
 ...   
}

解决方案示例      包A;

@Entity(name="a.Cell")
class Cell{
 ...   
}


package B;

@Entity(name="b.Cell")
class Cell{
 ...   
}

因此,要在HQL中使用它们,您必须编写

...createQuery("from a.Cell")...

13
2018-04-28 08:57



我有同样的问题,就像你说的那样。我改变了那些豆子的名字。这个对我有用 !!!!!!!! - Kumaresan Perumal


答案:


当您有多个具有相同类名或显式名称的@Entity时,会发生此异常。 要解决此问题,您必须为每个实体设置不同的显式名称。

错误案例:

package A;

@Entity
class Cell{
 ...   
}


package B;

@Entity
class Cell{
 ...   
}

解决方案示例      包A;

@Entity(name="a.Cell")
class Cell{
 ...   
}


package B;

@Entity(name="b.Cell")
class Cell{
 ...   
}

因此,要在HQL中使用它们,您必须编写

...createQuery("from a.Cell")...

13
2018-04-28 08:57



我有同样的问题,就像你说的那样。我改变了那些豆子的名字。这个对我有用 !!!!!!!! - Kumaresan Perumal


我在几个不同的时间遇到​​过这个错误。原因如下:

  1. 我的hibernate配置中有一个重复的映射(检查配置文件/代码)
  2. 两个线程试图同时构建HibernateSessionFactory对象。初始化代码上的同步锁定修复此问题。
  3. 尝试构建HibernateSessionFactory失败了,但是再次被调用。 Hibernate配置对象未被清除,因此正在再次处理实体。
  4. 您有两个实体类映射到同一文件。 Hibernate也会对此感到困惑。

2
2018-04-23 13:47





另一个常见的错误是,您最近移动了一个持久性类(从一个包到另一个包),但您的IDE无法正确清理.class文件。

或者您的Application Server中仍然存在一些.class文件。


1
2018-01-13 10:17





我认为这意味着您已在多个配置文件中声明了相同的实体。

如果没有更多信息,我会尝试注释掉配置文件的块,以便您不会看到错误,然后慢慢添加部分直到遇到错误?

如果只有几个配置文件,为什么不在这里发布?发布时,如果在XML的前面添加4个空格,那么它将是:

<xml>nicely formatted</xml>

希望这可以帮助。


0
2017-10-06 18:31





您可以产生此错误的最常见错误之一是尝试在同名表中保留两个不同的Java类。 Hibernate喜欢每个表中只有一种东西(对于子类等有一些例外),所以如果你要创建一个名为StudentRecord的类和一个名为MusicRecords的类,如果你然后告诉Hibernate继续这两个将这些类放入一个名为“records”的表中,就可以产生那种异常。有了这个特定的措辞,我怀疑你正在使用注释(在这种情况下,更容易意外地命名两个表,在两个不同的Java类中描述,同样的事情)。

希望这可以帮助! (虽然也许没有,正如我刚才注意到你在7个月前问过这个问题。我希望你不会被卡住,先生!)


0
2018-04-21 01:40





我最近有这个错误(重复导入):两个具有相同名称'MyEntity'但来自不同包/模块的实体: com.test1.MyEntity com.test2.MyEntity

我没有使用它们,但它们被hibernate加载到jboss。 我不被允许改变实体,所以我不得不做一些解决方法。

  1. <property name="hibernate.auto-import" value="false"/> to persistance.xml。它在部署到jboss时防止抛出重复异常。但是在调用我的查询时抛出了异常。
  2. 使用JPQL查询。在我看来,它看起来像: entityManager.createQuery("Select a.Name, b.name from AEntity a, BEntity b where a.ID = b.parentID")

这很难看,但这是一种解决方法。


0
2017-07-28 06:11