Я устанавливаю приложение с начальной загрузкой (2.1.2-RELEASE), инициализирующее контекст базы данных. Контекст базы данных уже настроен в другом приложении Spring (3.2.18-RELEASE) и работает правильно.
При запуске приложения я получаю следующее сообщение об ошибке:
org.hibernate.MappingException: property [identifiers] not found on entity [my.package.collection.CollectionIdentifier]
Инициализация базы данных - это стандарт весенней загрузки, предоставляющий свойства
spring.datasource.*
и spring.jpa.*
Как видно из кода ниже, свойство «идентификаторы» недоступно в сущности CollectionIdentifier. Однако он присутствует в сущности CollectionMaster. И так оно и должно быть
Собрание CollectionMaster, содержащее свойство «идентификаторы»
@Entity
@Audited
public class CollectionMaster extends AbstractPersistentObject implements Identifiable<CollectionIdentifier> {
private static final String COLLECTION_ID = "collection_id";
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name=COLLECTION_ID)
@Valid
private Set<CollectionIdentifier> identifiers;
public final Set<CollectionIdentifier> getIdentifiers() {
if(identifiers == null) {
identifiers = new HashSet<>();
}
return identifiers;
}
Идентифицируемый интерфейс
public interface Identifiable<R extends AbstractIdentifier> {
Set<R> getIdentifiers();
CollectionIdentifier entity
@Entity
@Audited
public class CollectionIdentifier extends AbstractIdentifier implements Comparable<CollectionIdentifier> {
@Column(length=SIZE_3)
private String type;
@Column(length=SIZE_3)
private String identifierType;
@NotNull
@Column(nullable=false, length=SIZE_65)
private String value;
Отображаемый суперкласс AbstractIdentifier
@MappedSuperclass
public abstract class AbstractIdentifier extends AbstractPersistentObject {
@Column(length=SIZE_50)
private String typeName;
Суперкласс, сопоставленный AbstractPersistentObject
@MappedSuperclass
public abstract class AbstractPersistentObject implements PersistentObject, Serializable {
@Id
@Column(length = SIZE_32)
private String id = IdGenerator.createId();
@Version
private Integer version;
трассировка стека ошибки:
Caused by: org.hibernate.MappingException: property [identifiers] not found on entity [my.package.collection.CollectionIdentifier]
at org.hibernate.mapping.PersistentClass.getProperty(PersistentClass.java:514) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.mapping.PersistentClass.getProperty(PersistentClass.java:525) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.cfg.IndexOrUniqueKeySecondPass.doSecondPass(IndexOrUniqueKeySecondPass.java:83) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1696) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1664) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:287) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
... 16 common frames omitted
Теперь возникает вопрос, почему на уровне инициализации контекст утверждает, что это свойство должно быть доступно в сущности CollectionIdentifier.
EDIT
Ошибка возникает для нескольких объектов, но только если уровень иерархии больше 1
например:.
CollectionMaster
@OneToMany
Set<CollectionIdentifier>
работает, но
Collection
@ManyToOne
Set<CollectionMaster>
@OneToMany
Set<CollectionIdentifer>
выдает ошибку