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

时间:2008-10-06 18:22:17

标签: hibernate jpa

如何解决以下Hibernate错误:

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

6 个答案:

答案 0 :(得分:14)

当您有多个具有相同类名或显式名称的@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")...

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

或者某些.class文件仍在您的Application Server中闲置。

答案 3 :(得分:1)

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

我没有使用它们但是它们被hibernate加载到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")
  3. 它很难看,但它是一种解决方法。

答案 4 :(得分:0)

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

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

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

<xml>nicely formatted</xml>

希望这有帮助。

答案 5 :(得分:0)

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

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