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);