我在使用鉴别器的 Hibernate 实体上有一个 @Any 映射。回到旧的代码库,它看起来像这样(我掩盖了对象名称):
<any id-type="long" name="medicalProfessional" meta-type="string" >
<meta-value value="M" class="com.xyz.app.domain.company.crew.MedicalProfessional"/>
<meta-value value="D" class="com.xyz.app.domain.company.crew.Doctor"/>
<column name="class_type"/>
<column name="medical_professional_id"/>
</any>
现在,我将其映射为如下所示(我已经模糊了对象名称):
public class SomeClass extends DomainObject {
@AnyMetaDef( name = "medicalProfessional", idType="int4", metaType="string", metaValues = {
@MetaValue( value="M", targetEntity = MedicalProfessional.class ),
@MetaValue( value="D", targetEntity = Doctor.class )
})
@Any( metaColumn = @Column( name="class_type" ), metaDef = "medicalProfessional")
@JoinColumn( name="medical_professional_id" )
private MedicalProfessional medicalProfessional;
据我所知,与之连接的其他所有内容都已正确配置。 MedicalProfessional 是一个 @MappedSuperclass,并且有自己的表。 Doctor 是一个实体,它扩展了 MedicalProfessional 并使用同一个表。除此之外,课程都很琐碎。
当我启动 Spring Boot 时,出现“org.hibernate.MappingException:无法实例化持久器 org.hibernate.persister.entity.SingleTableEntityPersister”异常。
Mapping异常好像又回到了空指针异常:
Caused by: java.lang.NullPointerException
at org.hibernate.tuple.entity.EntityMetamodel.indicatesCollection(EntityMetamodel.java:868) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.tuple.entity.EntityMetamodel.indicatesCollection(EntityMetamodel.java:874) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:289) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:517) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124) ~[hibernate-support-0.5.1.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:488) ~[?:?]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:348) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) ~[hibernate-support-0.5.1.jar:?]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.19.RELEASE.jar:4.3.19.RELEASE]
以防万一,hibernate-support-0.5.1.jar 是我的内部依赖项之一,它提供了 hibernate 5.0.12。
我在代码库中看不到空指针或缺少构造函数的任何明显原因。我很好奇这里可能会发生什么。我做错了什么吗?我将非常感谢任何帮助。
我的问题是 @AnyMetaDef 中的 idType="int4"。它应该是 idType="int"