MappingException при инициализации entityManagerFactory - PullRequest
0 голосов
/ 16 января 2019

Я устанавливаю приложение с начальной загрузкой (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>

выдает ошибку

1 Ответ

0 голосов
/ 17 января 2019

Отвечая на мой вопрос:

После долгих отладок в hibernate-core я обнаружил проблему в месте, которое, по моему мнению, было совершенно не связано.

Объекты базы данных импортируются из другого модуля через maven. Модель была разработана с Hibernate 4.x. Причиной ошибки является то, что все объекты, вызвавшие ошибку, имеют устаревший @org.hibernate.annotations.Index. Удаление аннотации устраняет проблему - хотя я бы посчитал это ошибкой гибернации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...