14

如何修复以下 Hibernate 错误:

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

4

7 回答 7

19

当您有多个具有相同类名称或显式名称的 @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")...
于 2014-04-28T08:57:06.407 回答
2

我遇到过这个错误几次。原因如下:

  1. 我的休眠配置中有重复的映射(检查配置文件/代码)
  2. 两个线程同时尝试构建 HibernateSessionFactory 对象。初始化代码上的同步锁定解决了这个问题。
  3. 构建 HibernateSessionFactory 的尝试失败,但正在再次调用。Hibernate Configuration 对象没有被清除,因此正在再次处理实体。
  4. 您有两个实体类被映射到同一个文件。Hibernate 也会对此感到窒息。
于 2009-04-23T13:47:20.063 回答
2

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

或者一些 .class 文件仍在您的应用程序服务器中。

于 2015-01-13T10:17:16.747 回答
1

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

我没有使用它们,但它们是由休眠加载到 jboss 的。我不允许更改实体,所以我不得不做一些解决方法。

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

这很丑陋,但它是一种解决方法。

于 2017-07-28T06:11:30.250 回答
0

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

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

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

<xml>nicely formatted</xml>

希望这可以帮助。

于 2008-10-06T18:31:46.523 回答
0

产生此错误的最常见错误之一是尝试在同名表中保留两个不同的 Java 类。Hibernate 喜欢在每个表中恰好存在一种东西(子类等有一些例外),所以如果你要创建一个名为 StudentRecord 的类和一个名为 MusicRecords 的类,然后你告诉 Hibernate 将两者都持久化将这些类放入一个名为“记录”的表中,您可能会产生这种异常。使用这种特定的措辞,我怀疑您正在使用注释(在这种情况下,更容易意外地命名两个表,在两个不同的 Java 类中描述,相同的东西)。

希望这可以帮助!(虽然也许不是,因为我刚才注意到您在 7 个月前问过这个问题。我希望您还没有被困住,先生!)

于 2009-04-21T01:40:37.923 回答
0

I had this issue because stuff that I had stashed was still being referenced, somehow (moved my entity from one package to another and both were being referenced). Re tarting my IDE, changing branches (which did not have these changes), etc, didn't work for me. I just ended up re-cloning the repo and the error went away.

于 2021-10-21T09:11:10.603 回答