2

私はHibernate 5.2.6とSpringデータEnvers 1.0.5を持つSpringブート1.4.2アプリケーションを持っています。私はエンティティを監査しており、監査記録は適切に保持されています。春のデータはorg.springframework.data.mapping.PropertyReferenceExceptionを処理します:タイプnoのfindRevisionsが見つかりました

私のアプリケーション構成クラスには、EnversRevisionRepositoryFactoryBean.classをJPAリポジトリファクトリとして使用するよう注釈が付けられています。

アプリケーションの設定

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class) 
@EnableTransactionManagement 
public class ApplicationConfig {} 

私は監査済みエンティティのリビジョンを読みしようとしています。エンティティリポジトリは、RevisionRepositoryを拡張します。リポジトリがPropertyReferenceExceptionのために初期化できないよう

interface FooRepository extends JpaRepository<Foo, Long>, 
    JpaSpecificationExecutor<Foo>, RevisionRepository<Foo, Long, Integer> { 

    foo findById(Long Id); 

    foo findByBarId(Long barId); 

} 

アプリケーションが起動

エンティティモデル

@Entity(name = "Base") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER) 
@Table(name = "BASE") 
@Audited 
public abstract class Base { 

    @Id 
    @GeneratedValue(generator = "baseSeq", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "baseSeq", sequenceName = "BASE_SEQ", allocationSize = 1) 
    @Column(name = "id", updatable = false, nullable = false) 
    private Long id; 

    @Column(name = "name", nullable = false) 
    private String name; 

    @Column(name = "name", nullable = false) 
    private long barId; 

    public Long getId() { 
    return id; 
    } 

    public void setId(Long id) { 
    this.id = id; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public long getBarId() { 
    return barId; 
    } 

    public void setBarId(long barId) { 
    this.barId = barId; 
    } 

    public abstract String getType(); 

} 

@Entity 
@DiscriminatorValue("1") 
@Audited 
@NamedQueries({ 
    @NamedQuery(
     name = "Foo.findById", 
     query = "select f from Base b where b.id = ?1"), 
    @NamedQuery(
     name = "Foo.findByBarId", 
     query = "select f from Base b where b.barId = ?1")}) 
public class Foo extends Base { 
    private String type = "Foo"; 

    @Override 
    public String getType() { 
     return type; 
    } 
} 

エンティティリポジトリは失敗します。 org.springframework.data.mapping.PropertyReferenceException::Foo型が見つかりません プロパティfindRevisionsによって引き起こさ

! でorg.springframework.data.mapping.PropertyPath。(PropertyPath.java:77) でorg.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329) org.springframework.dataました。 (PropertyPath.java:272) at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272) java:243) at org.springframework.data.repository.query.parser.Part。(Part.java:76) at org.springframework.data.repository.query.parser.PartTree $ OrPart(PartTree。 java:235) の のorg.springframework.data.repository.query.parser.PartTree $ Predicate.buildTree(PartTree.java:373) の のorg.springframework.data.repository.query.parser.PartTree $述語(PartTree.java : org.springframework.data.jpa.repository.query.PartTreeJpaQueryにおける353) でorg.springframework.data.repository.query.parser.PartTree(PartTree.java:84) (PartTreeJpaQuery.java:63。 ) org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:103)で で org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateIfNotFoundQueryLookupStrategy.resolveQuery org.springframework.data.repository.core.support.RepositoryFactorySupportで org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77) で(JpaQueryLookupStrategy.java:214) $ QueryExecutorMethodInterceptor。(RepositoryFactorySupport.java:435) org.springframework.data.repository.core.supportで org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220) で。 RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport。Javaの:266) でorg.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252) org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBeanで 。 Javaの:92) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579で)

私が理解していることから、これは箱の中でうまくいくはずです。リポジトリが目的のものとは異なる実装にバインドされているようです。何か案は? Gradleのビルドスクリプトから

関連スニペット事前に

buildscript { 
    ext { 
     springBootVersion = "1.4.2.RELEASE" 
     verifier_version = "1.0.0.RELEASE" 
    } 
    repositories { 
     maven {url "https://plugins.gradle.org/m2/"} 
     maven {url "http://repo.spring.io/plugins-release"} 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.build.gradle:propdeps-plugin:0.0.7") // this enables optional dependencies 
     classpath("io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE") 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath("se.transmode.gradle:gradle-docker:1.2") 
     classpath("com.commercehub:gradle-cucumber-jvm-plugin:0.7") 
     classpath("org.ajoberstar:grgit:1.1.0") 
     classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.1-rc3") 
     classpath("gradle.plugin.org.detoeuf:swagger-codegen-plugin:1.6.3") 
     classpath("org.springframework.cloud:spring-cloud-contract-gradle-plugin:${verifier_version}") 
     classpath "net.linguica.gradle:maven-settings-plugin:0.5" 
    } 
} 
... 
dependencyManagement { 
    imports { 
     mavenBom "org.springframework.cloud:spring-cloud-dependencies:Brixton.SR7" 
     mavenBom "org.springframework.cloud:spring-cloud-contract-dependencies:${verifier_version}" 
     mavenBom 'org.springframework.cloud:spring-cloud-stream-dependencies:Brooklyn.SR1' 
    } 
} 
... 
compile(
     "org.springframework.boot:spring-boot-starter-data-jpa", 
     'org.springframework.data:spring-data-commons',  
     'org.springframework.cloud:spring-cloud-starter-config', 
     'org.springframework.cloud:spring-cloud-starter-eureka', 
     'org.springframework.cloud:spring-cloud-starter-sleuth', 
     'org.springframework.cloud:spring-cloud-sleuth-zipkin', 
     'com.netflix.hystrix:hystrix-javanica',     
     'org.springframework.boot:spring-boot-starter-aop',  
     "org.springframework.boot:spring-boot-starter-web", 
     "io.swagger:swagger-annotations:1.5.9", 
     "com.google.code.gson:gson:2.7", 
     "gradle.plugin.org.detoeuf:swagger-codegen-plugin:1.6.3", 
     "org.springframework:spring-orm", 
     "com.oracle.jdbc:ojdbc7:12.1.0.2", 
     'org.springframework.cloud:spring-cloud-stream', 
     'org.springframework.cloud:spring-cloud-stream-test-support', 
     'org.springframework.cloud:spring-cloud-stream-binder-test', 
     "org.springframework.boot:spring-boot-starter-hateoas", 
     "com.fasterxml.jackson.module:jackson-module-parameter-names", 
     "com.fasterxml.jackson.datatype:jackson-datatype-jdk8", 
     "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1", 
     "org.hibernate:hibernate-core:5.2.6.Final", 
     "org.hibernate:hibernate-envers:5.2.6.Final", 
     "org.springframework.data:spring-data-envers:1.0.6.RELEASE" 
) 

感謝。

+0

あなた 'Foo'エンティティモデルをしてください含めることはできますか? – Naros

+0

@Naros、エンティティモデルを追加するために投稿を編集しました。 SpringがRevisionRepositoryメソッドをインタフェース実装メソッドをバインドするのではなく、エンティティプロパティの自動生成クエリ候補と解釈しているようですね。 – golfradio

+0

classpathに 'hibernate-envers'アーティファクトのバージョン' 5.2.6.Final'を持っていることを確認できますか?古いものではありませんか? – Naros

答えて

3
この回答に示すように、あなたはあなたのアプリケーションクラス( @SpringBootApplicationで注釈を付けたクラス)

に属性@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)を追加する必要があり

https://stackoverflow.com/a/36416266

+0

ありがとうございますが、私のオリジナルの投稿が表示されている場合は、既にその注釈があります。助けてくれなかった。 – golfradio

関連する問題