2

このような JPA エンティティがあります。@EntityListeners注釈に注意してください。

import javax.persistence.EntityListeners;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@XmlRootElement
@MappedSuperclass
@EntityListeners( { AuditingEntityListener.class } )
public class BaseEntity implements Serializable
{
    //body
}

JPAプロバイダーとしてHibernateを使用しています。

Spring を使用LocalContainerEntityManagerFactoryBeanして JPA を作成しますEntityManager。メソッドを使用して、エンティティ クラスをメソッドに登録setPersistenceUnitPostProcessorsするインスタンスを設定します。(Spring Boot ではないことはわかっていますが、それは別の機会に取り上げます)。PersistenceUnitPostProcessorpostProcessPersistenceUnitInfo

DataSourceにおよびその他のプロパティを設定した後LocalContainerEntityManagerFactoryBean、メソッドを呼び出すと、次のafterPropertiesSet例外がスローされます。

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
    at java.lang.Class.createAnnotationData(Class.java:3521)
    at java.lang.Class.annotationData(Class.java:3510)
    at java.lang.Class.getAnnotation(Class.java:3415)
    at java.lang.reflect.AnnotatedElement.isAnnotationPresent(AnnotatedElement.java:258)
    at java.lang.Class.isAnnotationPresent(Class.java:3425)
    at org.hibernate.annotations.common.reflection.java.JavaAnnotationReader.isAnnotationPresent(JavaAnnotationReader.java:50)
    at org.hibernate.annotations.common.reflection.java.JavaXAnnotatedElement.isAnnotationPresent(JavaXAnnotatedElement.java:60)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.categorizeAnnotatedClass(AnnotationMetadataSourceProcessorImpl.java:116)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.<init>(AnnotationMetadataSourceProcessorImpl.java:105)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.<init>(MetadataBuildingProcess.java:147)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)

@EntityListeners( { AuditingEntityListener.class } )上記のエンティティ クラスの注釈をコメントアウトしました。

その後、LocalContainerEntityManagerFactoryBeanafterPropertiesSet()メソッドはエラーをスローせEntityManager、使用可能なインスタンスを生成しました (これを使用して、エンティティの基本的な選択を行うことができました)。したがって、少なくとも、セットアップの残りの部分が正しく機能することはわかっています。

注釈を使用しているときにエラーが発生する理由@EntityListenersと、それを修正する方法を誰か教えてもらえますか? 私が知る限り、それはランタイム クラスパス (javax.persistence-api-2.2.jarファイルは webapp のWEB-INF/libディレクトリにあります) にあり、AuditingEntityListenerクラス (spring-data-jpa-1.11.6.RELEASE.jarファイル内) もそうです。

役立つ場合は、依存関係を取得するために使用している Gradle エントリを以下に示します。

compile "org.springframework:spring-core:4.3.7.RELEASE"
compile "org.springframework:spring-beans:4.3.7.RELEASE"
compile "org.springframework:spring-context:4.3.7.RELEASE"

compile "org.springframework.data:spring-data-jpa:1.11.6.RELEASE"
compile "javax.persistence:javax.persistence-api:2.2"
compile "org.hibernate:hibernate-core:5.2.10.Final"

@EntityListeners注釈を使用するときにエラーを取り除くにはどうすればよいですか?

ありがとうございました!!!

4

1 に答える 1