我将Spring Data Repository用于Mongo DB,Java 8和Mongo DB。 我有这样的DTO:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "cra")
public class CRAMongoDTO {
private String cra;
private String service;
private Date timestamp;
private String body;
private List<ParameterDTO> parameters;
private int hashCode;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
public class RequestDTO {
@NotBlank(message = "error.cra.notBlank")
@Id
private String cra;
@NotBlank(message = "error.service.notBlank")
private String service;
@NotNull(message = "error.timestamp.notNull")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
private Date timestamp;
@NotEmpty(message = "error.parameters.notEmpty")
private List<ParameterDTO> parameters;
public String getParameterValueByName(String name) {
if (parameters != null) {
return parameters.stream()
.filter(e -> name.equals(e.getName()))
.findAny()
.map(ParameterDTO::getValue)
.orElse(null);
} else {
return null;
}
}
}
CRAMongoDTO-它是Mongo DB中“ cra”集合中Object的结构,RequestDTO-它是具有在Mongo中搜索CRAMongoDTO的信息的对象。
我有这样的存储库:
public interface CRAMongoDTORepository extends MongoRepository<CRAMongoDTO, Long> {
@Query("{ '$and' : [ { 'cra' : ?0}, { 'service' : ?1}, { 'timestamp': { $gt: ?2 } }, " +
"{ 'hashCode': ?3 } ] }" )
CRAMongoDTO find(String cra, String service, Date timestamp, int hashCode, Sort sort);
}
以及ServiceImpl类中的此类方法:
@Override
public ResponseDTO findCRA(RequestDTO requestDTO) {
Sort sort = new Sort(Sort.Direction.DESC, "timestamp");
CRAMongoDTO craMongoDTO = craMongoDTORepository.find(requestDTO.getCra(), requestDTO.getService(),
requestDTO.getTimestamp(), requestDTO.getParameters().hashCode(), sort);
}
但是当我尝试调用 find 方法时,我得到的信息是,使用此类请求参数的MongoDB中没有结果(文档)。我已经检查了很多次,在MongoDB中,“ cra”集合中有此类文档。 我在做什么错了?