我已经通过扩展ReactiveCosmosRepository创建了一个cosmos存储库。现有的方法,如findById,save对我来说工作得很好。与此同时,像findByColumnName(字符串名)这样的添加方法正在失败(没有抛出任何异常)。
<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>你知道为什么会发生这种事吗?
发布于 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会帮你。

下面是我的代码:
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);
}
}
}https://stackoverflow.com/questions/65213973
复制相似问题