Исправление ошибки Hibernate Использование одного и того же имени объекта дважды

Как исправить следующую ошибку Hibernate:

Что означает «Использование одного и того же имени объекта дважды».


person Community    schedule 06.10.2008    source источник


Ответы (6)


Это исключение возникает, когда у вас есть более одного @Entity с одним и тем же именем класса или явным именем. Чтобы решить эту проблему, вы должны установить разные явные имена для каждой сущности.

Пример ошибки:

package A;

@Entity
class Cell{
 ...   
}


package B;

@Entity
class Cell{
 ...   
}

Пример решения: пакет А;

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


package B;

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

Итак, чтобы использовать их в HQL, вы должны написать

...createQuery("from a.Cell")...
person Misha Zadorozhnyy    schedule 28.04.2014
comment
У меня была такая же проблема, как вы говорите. я изменил название для этих бобов. меня устраивает !!!!!!!! - person Kumaresan Perumal; 25.05.2016

Я сталкивался с этой ошибкой несколько раз. Причины были следующие:

  1. У меня было дублированное сопоставление в моей конфигурации гибернации (проверьте файл/код конфигурации)
  2. Два потока пытались создать объект HibernateSessionFactory одновременно. Это исправила синхронизированная блокировка кода инициализации.
  3. Попытка построить HibernateSessionFactory не удалась, но вызывается снова. Объект Hibernate Configuration не был очищен, поэтому объекты обрабатываются снова.
  4. У вас есть два класса сущностей, сопоставленных с одним и тем же файлом. Hibernate тоже подавится этим.
person Adam Hawkes    schedule 23.04.2009

Другая распространенная ошибка заключается в том, что вы недавно переместили один из ваших классов сохраняемости (из одного пакета в другой), но ваша IDE не смогла должным образом очистить ваши файлы .class.

Или некоторые файлы .class все еще висят на вашем сервере приложений.

person Maarten van Leunen    schedule 13.01.2015
comment
Это исправило это для меня, так как у меня не было проблем с одинаковыми классами. - person borgmater; 05.02.2020

Недавно у меня возникла эта ошибка (дубликат импорта): два объекта с одинаковым именем «MyEntity», но из разных пакетов/модулей: com.test1.MyEntity com.test2.MyEntity

Я не использовал их, но они были загружены спящим режимом в jboss. Мне не разрешалось изменять сущности, поэтому мне пришлось прибегнуть к обходному пути.

  1. Добавьте <property name="hibernate.auto-import" value="false"/> в файл persistence.xml. Это предотвратило создание повторяющегося исключения при развертывании на jboss. Но при вызове моего запроса было выбрано исключение.
  2. Используйте запрос JPQL. В моем случае это выглядело так: entityManager.createQuery("Select a.Name, b.name from AEntity a, BEntity b where a.ID = b.parentID")

Это некрасиво, но это обходной путь.

person amisiuryk    schedule 28.07.2017

Я думаю, это означает, что вы объявили одну и ту же сущность более чем в одном файле конфигурации.

Без дополнительной информации я бы попробовал закомментировать фрагменты вашего файла конфигурации, чтобы вы не видели ошибку, а затем медленно добавлять разделы обратно, пока не столкнетесь с ошибкой?

Если это всего лишь несколько файлов конфигурации, то почему бы не разместить их здесь? При публикации, если вы добавите 4 пробела в начало вашего XML, это будет:

<xml>nicely formatted</xml>

Надеюсь это поможет.

person toolkit    schedule 06.10.2008

Одной из наиболее распространенных ошибок, которые вы можете совершить, чтобы вызвать эту ошибку, является попытка сохранить два разных класса Java в таблицах с одинаковыми именами. Hibernate любит, чтобы в каждой таблице был только один тип вещей (с некоторыми исключениями для подклассов и т.п.), и поэтому, если вы должны были создать класс с именем, возможно, StudentRecord и класс с именем MusicRecords, и если вы затем сказали Hibernate сохранить оба этих классов в таблицу под названием «записи», вы можете создать такое исключение. С этой конкретной формулировкой я подозреваю, что вы используете аннотации (в этом случае еще проще случайно назвать две таблицы, описанные в двух разных классах Java, одним и тем же).

Надеюсь это поможет! (хотя, возможно, нет, поскольку я только что заметил, что вы задали этот вопрос 7 месяцев назад. Я надеюсь, что вы еще не застряли, сэр!)

person Brandon Yarbrough    schedule 21.04.2009