【发布时间】: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