У меня есть сопоставление @Any для объекта Hibernate, которое использует дискриминаторы. В старой кодовой базе это выглядело примерно так (я скрыл имена объектов):
<any id-type = "long" name = "medicalProfessional" meta-type = "string" >
<meta-value value = "M" class = "com.borderconnect.app.domain.company.crew.MedicalProfessional"/>
<meta-value value = "D" class = "com.borderconnect.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 и имеет собственную таблицу. Доктор является сущностью, расширяет класс MedicalProfessional и использует ту же таблицу. Кроме этого, классы тривиальны.
Когда я запускаю весеннюю загрузку, я получаю исключение «org.hibernate.MappingException: не удалось создать экземпляр persister 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.
Я не вижу никаких очевидных причин нулевых указателей или отсутствующих конструкторов в моей кодовой базе. Мне любопытно, что здесь может происходить. Что-то я делаю не так? Буду очень признателен за любую помощь.




Моя проблема была idType="int4" в @AnyMetaDef. Это должно было быть idType="int"