java - Spring FirestoreReactiveRepository custom query is not working - Java
问题描述
I am trying to build some custom queries like the documentation is saying, but it is not working.
I got stuck in what i think is the block method and not any data is retrieved.
Here is my repo class:
@Repository
public interface UserRepository extends FirestoreReactiveRepository<User> {
Flux<User> findByCPF(String CPF);
Flux<User> findByEmail(String email);
}
and here is the model:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(collectionName = "userCollection")
public class User extends BaseEntity {
@NotNull(message = "{validation.notnull.user.name}")
private String name;
@Email
@NotNull(message = "{validation.notnull.user.email}")
private String email;
@NotNull(message = "{validation.notnull.user.password}")
private String password;
@NotNull(message = "{validation.notnull.user.address}")
private String address;
@CPF
@NotNull(message = "{validation.notnull.user.cpf}")
private String CPF;
@NotNull(message = "{validation.notnull.user.birthDate}")
private Date birthDate;
@NotNull(message = "{validation.notnull.user.role}")
private UserRoleEnum role;
}
this is the method that i'm building that i get stuck:
@Override
public Mono<User> create(User entity) {
var cpf = userRepository.findByCPF(entity.getCPF());
var email = userRepository.findByEmail(entity.getEmail());
if(cpf == null || email == null)
throw new EntityExistException();
else
return super.create(entity);
}
Yeah, it's an override because i have a generic service class:
public class GenericService<T>{
private FirestoreReactiveRepository<T> firestoreReactiveRepository;
public GenericService(FirestoreReactiveRepository<T> firestoreReactiveRepository){
this.firestoreReactiveRepository = firestoreReactiveRepository;
}
@Transactional
public Mono<T> create(T entity){
return firestoreReactiveRepository.save(entity);
}
**** HIDED CONTENT *****
Do you know how custom queries can be built with this FirestoreReactiveRepository ?
解决方案
有哪些类型:
var cpf = userRepository.findByCPF(entity.getCPF());
var email = userRepository.findByEmail(entity.getEmail());
?
你也可以这样写:
Flux<User> cpf = userRepository.findByCPF(entity.getCPF());
Flux<User> email = userRepository.findByEmail(entity.getEmail());
我看到三个问题:
- 你不订阅
cpf
和email
通量 - if 里面的条件总是假的,因为两个通量都不为空
if(cpf == null || email == null)
- ...假设
cpf
并且email
不会,Flux<User>
但User
我认为条件应该是cpf != null || email != null
代码可能看起来更像这样:
@Override
public Mono<User> create(User entity) {
var cpf = userRepository.findByCPF(entity.getCPF()); // Flux<User> cpf = ...
var email = userRepository.findByEmail(entity.getEmail()); // Flux<User> email = ...
return cpf.mergeWith(email)
.<User>handle((user, sink) -> sink.error(new EntityExistException()))
.switchIfEmpty(super.create(entity))
.next();
}
推荐阅读
- android - 如何根据条件在 recyclerView 中隐藏子项?
- amazon-s3 - hadoop fs -ls s3://bucket 或 s3a://bucket 抛出“没有这样的文件或目录”错误
- linux - 在 openscap 中修复后反转规则
- java - 设置拥有方ID
- php - Laravel 8 Blade:语法错误,文件意外结束,期待 elseif (T_ELSEIF) 或 else (T_ELSE) 或 endif (T_ENDIF)
- django - django 模型,NOT NULL 约束在foreignKey 上失败,即使很难我把 null=True 放在我的模型类中
- c++ - c ++返回引用实际上返回垃圾值
- angular - 通过路由在 Angular 中仅读取/写入权限
- python - 使用 ffmeg-python 从视频中提取帧时遇到问题
- asp.net-core - 无法在 AuthorizeView 中获取用户授权状态?