2017-08-23 27 views
0

私はこのような外観のJPAエンティティを持っています。私はJPAプロバイダとしてHibernateはを使用してい@EntityListeners注釈の原因TypeNotPresentExceptionProxyエラー

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

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

@EntityListeners注釈に注意してください。

私は、SpringのLocalContainerEntityManagerFactoryBeanを使用して、JPA EntityManagerを作成します。 setPersistenceUnitPostProcessorsメソッドを使用して、postProcessPersistenceUnitInfoメソッドでエンティティクラスを登録するPersistenceUnitPostProcessorインスタンスを設定します。 (私はそれが春のブートではないことを知っていますが、それは別の時間の話題です)。

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 })注釈をコメントアウト:afterPropertiesSetメソッドは、この例外をスロー呼び出して、LocalContainerEntityManagerFactoryBeanDataSourceおよびその他のプロパティを設定した後

。その後

LocalContainerEntityManagerFactoryBeanさんafterPropertiesSet()方法はしなかったエラーを投げ、それは(私は、エンティティの基本的な選択を行うためにそれを使用することができました)使用可能な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注釈を使用しているとき、私はエラーを取り除くために何ができますか?

ありがとうございます!

答えて

0

もう少しテストしました。私はこの注釈がないをしたことがわかったエラーを生成:

@EntityListeners({ }) 

のでAuditingEntityListenerが犯人であるように思われました。

その他のウェブ検索はthis issue in Springです。それはAuditingEntityListenerのランタイムコード織りのために必要であるとしてspring-aspectsプロジェクトを述べたので、私は私のGradleのビルドファイルにこれを追加:後

compile "org.springframework:spring-aspects:4.3.10.RELEASE" 

再構築し、問題が去っていきました再展開します!わーい!

関連する問題