我有一個使用Hibernate 5.2.6和Spring數據Envers 1.0.5的Spring引導1.4.2應用程序。我正在審計我的實體,並且審計記錄被正確保存。Spring Data Envers org.springframework.data.mapping.PropertyReferenceException:找不到類型爲
我的應用程序配置類被註釋爲使用EnversRevisionRepositoryFactoryBean.class作爲JPA存儲庫工廠。
應用程序配置
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
@EnableTransactionManagement
public class ApplicationConfig {}
我想讀的修訂爲審計單位。實體存儲庫擴展了RevisionRepository。作爲倉庫不能因PropertyReferenceException初始化
實體模型
@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;
}
}
實體庫
interface FooRepository extends JpaRepository<Foo, Long>,
JpaSpecificationExecutor<Foo>, RevisionRepository<Foo, Long, Integer> {
foo findById(Long Id);
foo findByBarId(Long barId);
}
應用程序啓動失敗。
造成的: 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。 mapping.PropertyPath.create(PropertyPath.java:309) 在 org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272) 在 org.springframework.data.mapping.PropertyPath.from(的PropertyPath。 Java的:243) 在 org.springframework.data.repository.query.parser.Part(Part.java:76) 在 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 :353) 在 org.springframework.data.repository.query.parser.PartTree(PartTree.java:84) 在 org.springframework.data.jpa.repository.query.PartTreeJpaQuery(PartTreeJpaQuery.java:63。 ) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:103) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateIfNotFoundQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:214) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77) 在 org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor(RepositoryFactorySupport.java:435) 在 org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220) 在 org.springframework.data.repository.core.support。 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"
)
預先感謝相關片段。
可以包括你的'Foo'實體模型嗎? – Naros
@Naros,我編輯了我的帖子以添加實體模型。看起來Spring似乎將RevisionRepository方法解釋爲實體屬性的自動生成查詢候選而不是綁定接口實現方法? – golfradio
你能否確認你在類路徑中有''hibernate-envers'神器的版本'5.2.6.Final',而不是老的? – Naros