Я получаю следующее исключение Hibernate:
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on cz.rohan.dusps.model.Switchport.konfiguracniTemplateAccess references an unknown entity: cz.rohan.dusps.model.KonfiguracniTemplate
org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:103)
org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
cz.rohan.dusps.helper.SessionFactoryHelper.initFactory(SessionFactoryHelper.java:122)
cz.rohan.dusps.helper.SessionFactoryHelper.getSessionFactory(SessionFactoryHelper.java:134)
cz.rohan.dusps.filter.HistorieZmenFilter.doFilter(HistorieZmenFilter.java:102)
cz.rohan.dusps.filter.CharsetFilter.doFilter(CharsetFilter.java:41)
после ~ 20 часов, потраченных на проблему с разными людьми, прочитав каждый возможный блог или форум, я действительно впадаю в отчаяние.
Это проект среднего размера. Я должен упомянуть, что база данных - Postgres 9.1, и мы генерируем базу данных с помощью инструмента моделирования. Hibernate подключается к базе данных, но не генерирует ее.
Я создал новый объект в базе данных, он называется "KonfiguracniTemplate" (шаблон конфигурации). Я создал модель, контроллер, форму, валидаторы, файлы .jsp, все в основном скопировал 1: 1 из существующей сущности аналогичной природы. Теперь я могу работать с KonfiguracniTemplate, CRUD полностью работает.
Проблема возникает, когда я ссылаюсь на этот KonfiguracniTemplate из сущности, называемой Switchport. В БД есть связь между двумя:
- Switchport 1: 1 ... 0: N KonfiguracniTemplate (switchport всегда ссылается на KonfiguracniTemplate; на KonfiguracniTemplate МОЖЕТ БЫТЬ ссылка ноль или более раз)
- В Switchport есть FK konfiguracniTemplateAccess_id для этого отношения.
В ... / model / Switchport.java отношение отображается так же, как и все другие рабочие отношения:
@ManyToOne
@JoinColumn(nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;
Я пробовал разные формы:
@ManyToOne
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;
или
@ManyToOne(targetEntity=KonfiguracniTemplate.class)
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;
Я также проверил:
- оба объекта находятся в одном пакете
- они оба помечены как "@Entity" с помощью "import javax.persistence.Entity;"
- сборка не выдает сообщений об ошибках / предупреждений
- Пока ссылка в Switchport закомментирована, все в порядке
Независимо от того, что я пытаюсь, я не могу избавиться от исключения "указывает на неизвестную сущность". Может кто-нибудь, пожалуйста, поделитесь идеей, что происходит или, возможно, как отладить проблему? Отслеживание стека вверху поста - это все, что я получаю в логах.
Весь вклад приветствуется!