簡體   English   中英

Spring Data Neo4j存儲庫組合錯誤:找不到類型為YYYY的屬性XXXX

[英]Spring Data Neo4j Repository Composition error: No property XXXX found for type YYYY

這應該是一個關於我可能從Spring Data文檔中遺漏的一些簡單問題。

我正在嘗試實現一個存儲庫擴展,如下所述: http//docs.spring.io/spring-data/data-neo4j/docs/3.0.2.RELEASE/reference/html/programming-model.html#d0e2970

代碼非常簡單。 我只有一個存儲庫和一個擴展接口(和實現)。

首先是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!

正如我從這個錯誤中理解的那樣,任何添加到擴展接口的方法Spring Data都會嘗試映射到相應類型的屬性。 但這是存儲庫擴展的唯一用途? 這不是我從文檔中理解的(上面鏈接的)。 如果這是真的,那么自定義查詢的替代方案是什么?

最后一個觀察是我知道@Query注釋,但我的用例需要特定的遍歷和動態查詢組合。


編輯:更多信息

再次查看文檔,我發現了一些可能與此相關的信息。 為了配置存儲庫組合,有必要將存儲庫掃描路徑從org.example.repository更改為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無法注入存儲庫。

文檔嘗試說出我想的一些事情,但是我無法理解短語(來自文檔)中的置之不理”意思: “如果你在spring配置中使用<context:component-scan> ,請確保把它放在<neo4j:repositories>后面,因為RepositoryFactoryBean為所有聲明的存儲庫添加了新的bean定義,否則上下文掃描不會選擇它們“

總結一下,我真的需要一些方向:-) ...另外,我認為文檔需要定義所需的依賴項。 並描述如何在項目中混合擴展存儲庫和標准存儲庫(僅限接口)。

我知道一年之后可能答案對你spring-data-neo4j ,但也許可以幫助其他正在與spring-data-neo4j ,就像我這些天一樣(見問題

只需指出需要改變的兩件事:

1)遵循spring-data存儲庫命名約定,自定義存儲庫的實現名稱必須是EntityRepsitoryImpl (盡管可以通過配置更改默認的sufix Impl)。 所以,你需要改變MyTypeRepositoryExtensionImplMyTypeRepositoryImpl

2)您無需更改neo4j:repositories包。 org.example.repository很好。 不要使用org.springframework.data.neo4j

3)關於所需的依賴關系,如果您沒有按照第2點中的說明更改軟件包存儲庫,那么基礎知識就足夠了:

  • org.springframework.data.spring-數據的Neo4j
  • javax.validation.validation-API
  • com.sun.jersey.jersey客戶端

我同意你的觀點, spring-data-neo4j存儲庫組合有點令人困惑,在網上很少有很好的例子......所以,最后我決定在GitHub上創建一個示例項目,其基本示例展示了我們如何能夠去做。

希望它能在未來幫助其他人。

請參閱GitHubneo4jCustomRepository

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM