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
,由於此超出本文范圍,僅給出參考鏈接,戳這里或這里。