Как реализовать множественное наследование @MappedSuperClass для сущностей - PullRequest
0 голосов
/ 15 февраля 2019

Я настраиваю модели домена JPA с помощью Eclipselink.Я построил эти модели с несколькими классами @MappedSuperclass, прежде чем перейти к фактическому классу @Entity.Когда я выполняю запросы критериев, я получаю следующую ошибку:

org.springframework.dao.InvalidDataAccessApiUsageException: The attribute [null] is not present in the managed type [EntityTypeImpl@2123492724:DogEntity [ javaType: class com.fake.fake.entity.DogEntity descriptor: RelationalDescriptor(com.fake.fake.entity.DogEntity --> [DatabaseTable(Dog)]), mappings: 22]].;
@MappedSuperclass
public abstract class AbstractBaseEntity {
    @Id
    @Column(name = "id")
    protected String id;

    @Column(name = "lastUpdated")
    @Temporal(TemporalType.TIMESTAMP)
    protected Date lastUpdated;
}

@MappedSuperclass
public abstract class PetImpl extends AbstractBaseEntity implements Pet {
    // I pretty much use this class to implement some of Pet
    // and add some shared transient fields

    @Transient
    protected List<String> tags;

    @Override
    public List<String> getTags() {
        return tags;
    }

    // I have some abstract methods in here also
    public abstract int getMaxTags();
}

@Entity
public class DogEntity extends PetImpl {

    @Column(name = "breed")
    private String breed;

    @Override
    public int getMaxTags() {
        return 1;
    }

}

Full Stacktrace (извиняюсь, если сбиваю с толку, пытался отбросить специфичные для предприятия термины)

org.springframework.dao.InvalidDataAccessApiUsageException: The attribute [null] is not present in the managed type [EntityTypeImpl@909914828:DogEntity [ javaType: class com.fake.fake.entity.DogEntity descriptor: RelationalDescriptor(com.fake.fake.entity.DogEntity --> [DatabaseTable(Dog)]), mappings: 22]].; nested exception is java.lang.IllegalArgumentException: The attribute [null] is not present in the managed type [EntityTypeImpl@909914828:DogEntity [ javaType: class com.fake.fake.entity.DogEntity descriptor: RelationalDescriptor(com.fake.fake.entity.DogEntity --> [DatabaseTable(Dog)]), mappings: 22]].
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384) ~[spring-orm-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:418) ~[spring-orm-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) ~[spring-data-jpa-1.11.3.RELEASE.jar:?]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57) ~[spring-data-commons-1.13.3.RELEASE.jar:?]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]

Iможно было бы ожидать, что наличие @MappedSuperclass на каждом из моих суперклассов было бы хорошо, но, похоже, есть некоторая проблема, которую я не могу на самом деле диагностировать, поскольку просто говорю, что у меня есть какой-то атрибут [null].

...