1 問題描述
在Spring Boot中使用Mongodb中的Example查詢數據時查詢不到,示例代碼如下:
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("username", ExampleMatcher.GenericPropertyMatchers.exact())
.withIgnorePaths("id","password");
2 問題分析
在Spring Data中使用Mongodb時,插入數據會添加一個_class字段,這個字段是用來映射POJO的,也就是說,如果一個實體類如下:
@Document(collection = "user")
class User{
@Id
private String id;
private String username;
private String password;
}
則存進數據庫的字段如下:
_id,_class,username,password
而使用ExampleMatcher,默認情況下會匹配所有字段,因此,如果實體類的包名改變了,_class字段就不會匹配,這樣就無法正確地得到查詢結果。
3 解決方案
把_class添加進IgnorePath即可:
.withIgnorePaths("_class","id","password")
如果不想在插入數據時自動添加_class字段,可以修改MongoTemplate或者MappingMongoConverter,由於此超出本文范圍,僅給出參考鏈接,戳這里或這里。
