首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义查询在ReactiveCosmosRepository中不起作用

自定义查询在ReactiveCosmosRepository中不起作用
EN

Stack Overflow用户
提问于 2020-12-09 17:25:13
回答 1查看 558关注 0票数 1

我已经通过扩展ReactiveCosmosRepository创建了一个cosmos存储库。现有的方法,如findById,save对我来说工作得很好。与此同时,像findByColumnName(字符串名)这样的添加方法正在失败(没有抛出任何异常)。

代码语言:javascript
复制
    <dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-cosmosdb-spring-boot-starter</artifactId>
  <version>2.3.3</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-spring-data-cosmos</artifactId>
  <version>3.0.0-beta.2</version>
</dependency>
<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-cosmosdb</artifactId>
  <version>2.6.11</version>
</dependency>

你知道为什么会发生这种事吗?

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 16:35:59

根据您的描述,我尝试了this document来创建一个spring boot示例,并且也做得很好。我不知道你是如何创建像"findByColumnName(String Name)“这样的方法的;我认为你可以在你的问题中发布你的方法,它会更简单。

根据我的研究,Spring Data Azure Cosmos DB SDK 3.x.x支持@query注解来定义自定义查询!也许this document会帮你。

下面是我的代码:

代码语言:javascript
复制
import java.util.List;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.azure.spring.data.cosmos.repository.Query;
import com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository;

@Repository
public interface UserCosmosRepository extends CosmosRepository<User, String> {
    @Query(value = "select * from c where c.firstName =  @firstName")
    List<User> findByFirstName(@Param("firstName") String firstName);
}

import java.util.List;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

@Service
public class TestService {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestService.class);

    @Autowired
    private UserRepository repository;
    @Autowired
    private UserCosmosRepository cosmosRepository;
    
    public void run(String... var1) throws Exception {
        repository.deleteAll().block();
        final User testUser = new User("1", "Tasha", "Calderon", "4567 Main St Buffalo, NY 98052");

        LOGGER.info("Saving user: {}", testUser);

        // Save the User class to Azure CosmosDB database.
        final Mono<User> saveUserMono = repository.save(testUser);

        final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");

        //  Nothing happens until we subscribe to these Monos.
        //  findById will not return the user as user is not present.
        final Mono<User> findByIdMono = repository.findById(testUser.getId());
        final User findByIdUser = findByIdMono.block();
        Assert.isNull(findByIdUser, "User must be null");

        final User savedUser = saveUserMono.block();
        Assert.state(savedUser != null, "Saved user must not be null");
        Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()), "Saved user first name doesn't match");

        LOGGER.info("Saved user");

        firstNameUserFlux.collectList().block();

        final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
        Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");

        final User result = optionalUserResult.get();
        Assert.state(result.getFirstName().equals(testUser.getFirstName()), "query result firstName doesn't match!");
        Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!");

        LOGGER.info("Found user by findById : {}", result);
        
        List<User> a = cosmosRepository.findByFirstName("Tasha");
        if(a.size()>0) {
            String id = a.get(0).getAddress();
            LOGGER.info("Found user by name : {}", id);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65213973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档