【问题标题】:Spring FirestoreReactiveRepository custom query is not working - JavaSpring FirestoreReactiveRepository 自定义查询不起作用 - Java
【发布时间】:2021-10-24 18:35:10
【问题描述】:

我正在尝试构建一些自定义查询,例如 documentation 所说的,但它不起作用。

我陷入了我认为的块方法,没有检索到任何数据。

这是我的回购类:

@Repository
public interface UserRepository extends FirestoreReactiveRepository<User> {

    Flux<User> findByCPF(String CPF);
    Flux<User> findByEmail(String email);
}

这是模型:

@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;
}

这是我正在构建的方法,但我被卡住了:

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

是的,这是一个覆盖,因为我有一个通用服务类:

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 *****

您知道如何使用此 FirestoreReactiveRepository 构建自定义查询吗?

【问题讨论】:

  • 您能否发布扩展您的GenericService&lt;User&gt; 的完整子类?还有任何错误堆栈跟踪?

标签: java spring spring-boot google-cloud-firestore spring-repositories


【解决方案1】:

有哪些类型:

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

我看到三个问题:

  1. 您没有订阅 cpfemail 助焊剂
  2. if 中的条件始终为假,因为两个通量都不为空
 if(cpf == null || email == null)
  1. ...假设cpfemail不是Flux&lt;User&gt;而是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();
    }

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 2017-01-09
    • 2016-10-05
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2022-01-16
    相关资源
    最近更新 更多