这应该是一个简单的问题,关于我可能从 Spring Data 文档中遗漏的内容。
我正在尝试实现存储库扩展,如下所述:http://docs.spring.io/spring-data/data-neo4j/docs/3.0.2.RELEASE/reference/html/programming-model.html#d0e2970 http://docs.spring.io/spring-data/data-neo4j/docs/3.0.2.RELEASE/reference/html/programming-model.html#d0e2970.
代码非常简单。我只有一个存储库和一个扩展接口(和实现)。
首先是一个存储库MyType
class:
public interface MyTypeRepository extends
GraphRepository<MyType>, MyTypeRepositoryExtension { }
然后是扩展接口:
public interface MyTypeRepositoryExtension {
void anyMethodNameForQuery();
}
及其实现:
public class MyTypeRepositoryExtensionImpl {
public void anyMethodNameForQuery() {
//custom query code
}
}
使用此代码,Spring Data 在引导其映射基础设施时会抛出错误:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property any found for type MyType!
正如我从这个错误中了解到的,添加到扩展接口 Spring Data 的任何方法都会尝试映射到相应类型的属性。但这是存储库扩展的唯一用途吗?这不是我从文档(上面链接)中理解的。如果这是真的,自定义查询的替代方案是什么?
最后的观察是我知道@Query
注释,但我的用例需要特定的遍历和动态查询组合。
编辑:更多信息
再次查看文档,我发现了一些可能与此相关的信息。为了配置存储库组成,有必要从以下位置更改存储库扫描路径:org.example.repository
to org.springframework.data.neo4j
。这就是为什么我放入的任何方法MyTypeRepositoryExtension
Spring Data 接口试图映射到MyType
财产。
我已经按照记录设置了 Spring Data Neo4j 存储库扫描路径,但是我遇到了许多运行时类未找到错误,例如:java.io.FileNotFoundException: class path resource [javax/enterprise/inject/spi/Extension.class] cannot be opened because it does not exist"
.
以完全临时的试错方式,我设法找到了一些可以填充缺失类的依赖项。我最终得到了这些依赖项:
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>3.3.3</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-lucene4</artifactId>
<version>3.3.3</version>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>3.3.3</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0-SP1</version>
</dependency>
这消除了类未找到错误,但现在,由于我更改了存储库路径,Spring 无法注入存储库。
我认为文档试图对此进行说明,但我无法理解短语中“将其放在后面”的含义(来自文档):“如果你使用<context:component-scan>
在你的 spring 配置中,请确保将其放在后面<neo4j:repositories>
,当 RepositoryFactoryBean 为所有声明的存储库添加新的 bean 定义时,上下文扫描不会拾取它们,否则”.
总而言之,我真的需要一些指导:-) ...另外,我认为文档需要定义所需的依赖项。并描述如何在项目中混合扩展存储库和标准存储库(仅接口)。