【问题标题】:Spring could not create EntityManagerFactory after upgrading to Hibernate 5.x升级到 Hibernate 5.x 后 Spring 无法创建 EntityManagerFactory
【发布时间】:2016-06-24 22:19:50
【问题描述】:

当 spring 加载 EntityManagerFactory 时,我正在使用最新的 springframework disto v4.2.5.RELEASE 和 Hibernate v5.0.7.Final 我得到以下异常

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 Properties 的 spring 配置中指定任何内容以使其与 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 Class 并使用 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 的那一刻起,它就开始工作了……仍然想知道为什么它现在发生了,这在旧版本的 hibernate 中没有。

所以我想这个问题与spring无关,而是与hibernate有关。有什么见解吗?

【问题讨论】:

  • 你能显示com.sample.model.Sample
  • @Jens 在我原来的帖子中更新
  • 类 Auditable 来自哪里?
  • 它的自定义类就像在伪代码中一样,它具有可审计的字段,如 createdBy modifiedDate 等
  • 看起来像是找不到这些类之一:Not all named super-types (extends) were found

标签: spring hibernate jpa hibernate-5.x spring-orm


【解决方案1】:

我有类似的问题。 您尝试在 hbm.xml 文件中对标签进行分类而不是加入子类标签

【讨论】:

  • 添加更多细节会很有帮助!
  • @nhiendat 是否替换类以支持加入子类?改成课堂作业,就像加入子类一样?
  • 是的,我已将类名替换为加入子类。例如:table="tbl_blood_sample" -> class= "BloodSample" => 替换以下内容:
猜你喜欢
  • 2017-03-05
  • 2021-12-26
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多