[英]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)。 所以,你需要改變MyTypeRepositoryExtensionImpl
為MyTypeRepositoryImpl
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上創建一個示例項目,其基本示例展示了我們如何能夠去做。
希望它能在未來幫助其他人。
請參閱GitHub
: neo4jCustomRepository
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.