我有一个名为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
类:
public class MyUserId implements Serializable{
@Property
private String userId;
@Property
private String sampleId;
// setters, getters
}
在我的Mongo中,文档存储为{_id:{userId:....., sampleId:....}, <more fields here>}
我的userRepository是这样的:
public interface UserRepository extends MongoRepository<User, MyUserId> {
@Query("{'_id': {$in: ?0}}")
List<User> findByUserIds(Collection<MyUserId> userIds);
}
当我查询我的userRepository时,查询被解雇为:
{_id: {$in: [ {_class:"com.sampleuser.MyUserId", userId:"....", sampleId:"...."}, {_class:"com.sampleuser.MyUserId", userId:"....", sampleId:"...."}]}}
很明显它在查询时添加了_class字段,但在存储时没有添加.class字段。有人可以解释如何解决这个问题吗?它导致我的所有查询都失败了。谢谢!
答案 0 :(得分:1)
使用@Query
whith复杂id类型时确实存在问题。我建议在DATAMONGO-1078解决之前使用自定义存储库实现。
在自定义实现中,您可以使用MongoTemplate
以某种方式执行查询
@Override
public List<User> findByUserIds(Collection<MyUserId> userIds) {
return template.find(query(where("id").in(userIds)), User.class);
}