我试图将自定义查询添加到MongoRepository实例,但它无法正常工作。 here中的第10.3节描述了我尝试做的事情。我尝试了4种不同的方式,但似乎没有任何效果......
我的代码
public interface MyRepository extends MongoRepository<StudentEO,CustomId>{
//1st attempt.
//StudentEO findByFirstName(String firstName);
//2nd attempt.
//@Query("{ 'firstName' : ?0 }")
//StudentEO findByFirstName(String firstName);
//3rd attempt.
//List<StudentEO> findByFirstName(String firstName);
//4th attempt
@Query("{ 'firstName' : ?0 }")
List<StudentEO> findByFirstName(String firstName);
}
@Document(collection = "data_point_metadata")
public class StudentEO {
@Id
private CustomId id;
private String firstName;
private String lastName;
private StudentType studentType;
...
getters and setters...
}
@Component
public class StringToStudentTypeConverter implements Converter<String, StudentType> {
@Override
public StudentType convert(String source) {
if(source == null){
return null;
}
try{
return StudentType.valueOf(source.trim().toUpperCase());
}catch(Exception e){
LOGGER.error("invalid dataType value - "+e.getMessage());
}
return null;
}
}
在日志中我看到:
c.f.f.s.w.m.u.StringToDataTypeConverter - invalid studentType value - No enum constant ...StudentType.John
o.s.data.mongodb.core.MongoTemplate - find using query: { "firstName" : null } fields: null ...
我什么也得不回来。当我调试它时,我的服务层肯定传递了一个有效的firstName。不是空的。
我还使用默认的findAll()存储库方法,它工作正常。
PageRequest pageRequest = new PageRequest(pageNumber, pageSize != 0 ? pageSize : defaultPageSize);
Page<StudentEO> studentsPage = myRepository.findAll(pageRequest);
我做错了什么?
我使用的是以下版本的spring apis: