gpt4 book ai didi

java - Spring Data Neo4j Repository Composition 错误 : No property XXXX found for type YYYY

转载 作者:搜寻专家 更新时间:2023-11-01 03:52:04 25 4
gpt4 key购买 nike

这应该是一个简单的问题,关于我可能在 Spring Data 文档中遗漏的内容。

我正在尝试实现存储库扩展,如下所述:http://docs.spring.io/spring-data/data-neo4j/docs/3.0.2.RELEASE/reference/html/programming-model.html#d0e2970 .

代码非常简单。我只有一个存储库和一个扩展接口(interface)(和实现)。

首先是 MyType 的存储库类:

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!

正如我从这个错误中了解到的,任何添加到扩展接口(interface) Spring Data 的方法都会尝试映射到相应类型的属性。但这是存储库扩展的唯一用途吗?这不是我从文档(上面链接)中理解的内容。如果是这样,自定义查询的替代方案是什么?

最后的观察是我知道 @Query注释,但我的用例需要特定的遍历和动态查询组合。


编辑:更多信息

再次查看文档,我发现了一些可能与此相关的信息。为了配置存储库组合,有必要将存储库扫描路径从 org.example.repository 更改为至 org.springframework.data.neo4j .这就是为什么我在 MyTypeRepositoryExtension 中放入任何方法的原因接口(interface) Spring Data 试图映射到 MyType属性(property)。

我已经按照文档设置了 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 无法注入(inject)存储库。

我认为文档试图说明这一点,但我无法理解短语(来自文档)中的“把它放在后面”是什么意思:“如果您在 spring 配置中使用 <context:component-scan> ,请确保将其放在 <neo4j:repositories> 后面,因为 RepositoryFactoryBean 为所有已声明的存储库添加了新的 bean 定义,否则上下文扫描不会拾取它们”

总而言之,我真的需要一些指导 :-) ... 另外,我认为文档需要定义所需的依赖项。并描述如何在一个项目中混合使用扩展存储库和标准存储库(仅限接口(interface))。

最佳答案

我知道一年后答案可能对你没有用,但也许可以帮助那些正在努力使用 spring-data-neo4j 的人,比如我这些天(见 question )

只需指出您需要更改的两件事:

1) 按照 spring-data 存储库命名约定,自定义存储库的实现名称必须是 EntityRepsitoryImpl(尽管可以更改默认后缀 Impl通过配置)。因此,您需要将 MyTypeRepositoryExtensionImpl 更改为 MyTypeRepositoryImpl

2) 您不需要更改neo4j:repositories 包。 org.example.repository 没问题。 不要使用org.springframework.data.neo4j

3) 关于所需的依赖项,如果您不更改第 2 点中提到的包存储库,那么基本就足够了:

  • org.springframework.data.spring-data-neo4j
  • javax.validation.validation-api
  • com.sun.jersey.jersey-client

我同意你的看法,spring-data-neo4j 存储库的组成有点困惑,网上也很少有好的例子......所以,最后我决定在GitHub,其中有一个基本示例展示了我们如何做到这一点。

希望它能在未来帮助其他人。

GitHub 上查看:neo4jCustomRepository

关于java - Spring Data Neo4j Repository Composition 错误 : No property XXXX found for type YYYY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23547885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com