如何修复以下 Hibernate 错误:
“两次使用相同的实体名称”是什么意思。
当您有多个具有相同类名称或显式名称的 @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")...
我遇到过这个错误几次。原因如下:
另一个常见错误是您最近移动了一个持久性类(从一个包到另一个包),但您的 IDE 未能正确清理您的 .class 文件。
或者一些 .class 文件仍在您的应用程序服务器中。
我最近有这个错误(重复导入):两个具有相同名称“MyEntity”但来自不同包/模块的实体:com.test1.MyEntity com.test2.MyEntity
我没有使用它们,但它们是由休眠加载到 jboss 的。我不允许更改实体,所以我不得不做一些解决方法。
<property name="hibernate.auto-import" value="false"/>
到persistance.xml。它防止在部署到 jboss 时抛出重复的异常。但是当我的查询被调用时抛出了异常。entityManager.createQuery("Select a.Name, b.name from AEntity a,
BEntity b where a.ID = b.parentID")
这很丑陋,但它是一种解决方法。
我认为这意味着您在多个配置文件中声明了相同的实体。
如果没有更多信息,我会尝试注释掉您的配置文件的块,这样您就不会看到错误,然后慢慢添加部分,直到遇到错误?
如果它只有几个配置文件,那为什么不在这里发布呢?发布时,如果您在 XML 的前面添加 4 个空格,那么它将是:
<xml>nicely formatted</xml>
希望这可以帮助。
产生此错误的最常见错误之一是尝试在同名表中保留两个不同的 Java 类。Hibernate 喜欢在每个表中恰好存在一种东西(子类等有一些例外),所以如果你要创建一个名为 StudentRecord 的类和一个名为 MusicRecords 的类,然后你告诉 Hibernate 将两者都持久化将这些类放入一个名为“记录”的表中,您可能会产生这种异常。使用这种特定的措辞,我怀疑您正在使用注释(在这种情况下,更容易意外地命名两个表,在两个不同的 Java 类中描述,相同的东西)。
希望这可以帮助!(虽然也许不是,因为我刚才注意到您在 7 个月前问过这个问题。我希望您还没有被困住,先生!)
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.