Spring MongoRepository查询向查询添加_类字段
我有一个名为User的域类。它使用Spring MongoRepository查询向查询添加_类字段,spring,mongodb,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Data,Spring Data Mongodb,我有一个名为User的域类。它使用MyUserId对象作为Id @Document(collection = "users") public class User implements Serializable { @Property @Id private MyUserId id; @Version private Integer version; private String firstName; // Setters, getters }
MyUserId
对象作为Id
@Document(collection = "users")
public class User implements Serializable {
@Property
@Id
private MyUserId id;
@Version
private Integer version;
private String firstName;
// Setters, getters
}
MyUserId
类:
public class MyUserId implements Serializable{
@Property
private String userId;
@Property
private String sampleId;
// setters, getters
}
在我的Mongo中,文档被存储为{u id:{userId:…,sampleId:…},}
我的userRepository如下所示:
public interface UserRepository extends MongoRepository<User, MyUserId> {
@Query("{'_id': {$in: ?0}}")
List<User> findByUserIds(Collection<MyUserId> userIds);
}
很明显,它是在查询时添加_class字段,而不是在存储时添加。有人能解释一下如何解决这个问题吗?这导致我所有的查询都失败了。谢谢大家! 使用复杂id类型的
@Query
时,实际上存在一个问题。我建议在问题解决之前使用自定义存储库实现
在自定义实现中,您可以使用MongoTemplate
以如下方式执行查询
@Override
public List<User> findByUserIds(Collection<MyUserId> userIds) {
return template.find(query(where("id").in(userIds)), User.class);
}
@覆盖
公共列表FindByUserID(集合用户ID){
返回template.find(查询(其中(“id”).in(userid)),User.class);
}
感谢您确认这是一个问题,我马上就到了。
@Override
public List<User> findByUserIds(Collection<MyUserId> userIds) {
return template.find(query(where("id").in(userIds)), User.class);
}