1

我使用的是自定義的Spring數據存儲庫實現/擴展(示例here之一),但我仍想使用Optionals進行基本操作 - 下面(例如對於蒙戈或Elasticsearch):spring-data both:自定義存儲庫和開箱即用的optionals

public interface DomainRepository extends MongoRepository<Domain, Long>, DomainRepositoryCustomAnyName { 
    Optional<Domain> findOne(Long id); 
} 

在不需要FPGA實現的是對我自己的方法,我DomainRepositoryImpl類(實現DomainRepositoryCustomAnyName)。

這是否有可能?

目前,我發現了一個異常(同爲一個示意我應該實現方法在我DomainRepositoryImpl類):Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findOne found for type Domain

回答

3

我遇到了完全一樣的問題,我想。我沒有使用MongoDB,但使用PostgreSQL,但問題的原因可能是相同的。您鏈接到的網站上的示例沒有使用findOne,因此我不確定您選擇了哪個網站。很多教程都是針對2.x.x之前的spring-data版本的。問題在於,存儲庫的接口和實現從1.11.8改變到2.0.0,所以你的問題可能會與版本問題相關聯。

從某處過去1.11.8的SimpleJpaRepository有用於包裝該結果在Optional的方法

public T findOne(ID id) 

和支持。這將適合您的代碼。我測試了它,它只是一個簡單的例子。當然,我沒有你的域對象,等等。

在2.0.0這個方法得到了來自SimpleJpaRepository取出,並通過

public <S extends T> Optional<S> findOne(Example<S> example) 

​​

所以假設你正在使用彈簧數據的JPA 2.xx的替換,有3個選項:

  1. 切換回版本1.11.8

  2. 你的方法的簽名更改爲

    Optional<Domain> findOne(Example<Domain> ex);

  3. 改用新方法:

    Optional<Domain> findById(Long id);