Spring не удалось создать EntityManagerFactory после обновления до Hibernate 5.x

Я использую последнюю версию springframework disto v4.2.5.RELEASE и Hibernate v5.0.7.Final, когда Spring загружает EntityManagerFactory, я получаю следующее исключение

Caused by: org.hibernate.HibernateException: Not all named super-types (extends) were found : [com.sample.model.Sample]
at org.hibernate.boot.model.source.internal.hbm.EntityHierarchyBuilder.buildHierarchies(EntityHierarchyBuilder.java:76)
at org.hibernate.boot.model.source.internal.hbm.HbmMetadataSourceProcessorImpl.<init>(HbmMetadataSourceProcessorImpl.java:66)
at org.hibernate.boot.model.source.internal.hbm.HbmMetadataSourceProcessorImpl.<init>(HbmMetadataSourceProcessorImpl.java:40)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.<init>(MetadataBuildingProcess.java:142)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319)

Тот же код работал с v4.2.5.RELEASE и Hibernate v.4.3.10.

Я знаю, что Hibernate изменил построение основных метаданных в v5.x, нужно ли что-то указать в весенней конфигурации свойств JPA/EntityManagerFactory/Hibernate, чтобы он работал с Hibernate 5.x?

@Entity
@Table(name = "tbl_sample")
public class Sample extends Auditable {
  private Long id;
  @ManyToOne
  @JoinColumn(name = "relationA", nullable = true)
  private RelationA relationA;
  ... etc
}

@MappedSuperClass
public abstract class Auditable extends Persistable {
   //audit props
}

@MappedSuperClass
public abstract class Persistable {
   //common props
}

Я смог сузить проблему после включения журнала трассировки, был еще один класс, который расширяет класс Sample и его сопоставление с использованием hbm.xml, как показано ниже.

<hibernate-mapping package="com.sample.model">  
  <joined-subclass name="BloodSample" table="tbl_blood_sample"
   extends="com.sample.model.Sample">
   <key column="ID" />

  <property name="sampleNo" column="sampleNo"/>
   etc....
 </joined-subclass>

В тот момент, когда я удалил это отношение hbm, оно начало работать ... Все еще интересно, почему это происходит сейчас, чего не было в более старой версии спящего режима.

Так что я думаю, что эта проблема не имеет ничего общего с весной, а связана с спящим режимом. Любое понимание?


person Sreekanth    schedule 10.03.2016    source источник
comment
можешь показать com.sample.model.Sample   -  person Jens    schedule 10.03.2016
comment
@Jens обновлено в моем исходном сообщении   -  person Sreekanth    schedule 10.03.2016
comment
откуда взялся класс Auditable?   -  person Jens    schedule 10.03.2016
comment
его пользовательский класс, как в псевдокоде, который имеет проверяемые поля, такие как createdBy ModifiedDate и т. д.   -  person Sreekanth    schedule 10.03.2016
comment
Похоже, один из этих классов не найден: Not all named super-types (extends) were found   -  person Jens    schedule 10.03.2016
comment
@Jens, извините, не понял, вы имеете в виду, что класс не найден? но тот же код работает в Hibernate v 4.3.10   -  person Sreekanth    schedule 10.03.2016
comment
hibernate.atlassian.net/browse/HHH-10609, вероятно, это ошибка в ядре спящего режима построитель метаданных   -  person Sreekanth    schedule 15.03.2016


Ответы (1)


У меня похожая ваша проблема. Вы пытаетесь использовать тег class вместо тега join-subclass в файле hbm.xml

person nhiendat    schedule 15.03.2016
comment
добавление более подробной информации было бы полезно! - person Arun Xavier; 15.03.2016
comment
@nhiendat Заменяет ли класс в пользу присоединенного подкласса? переход к классовой работе, как если бы это был объединенный подкласс? - person Sreekanth; 15.03.2016
comment
Да, я заменил имя класса на объединенный подкласс. Пример: table=tbl_blood_sample -› class= BloodSample =› ‹joined-subclass ...›‹/‹joined-subclass› замените следующее: ‹BloodSample ...›‹/BloodSample› - person nhiendat; 18.05.2016