Spring MongoRepository查询将_class字段添加到查询中

时间:2014-10-27 20:12:18

标签: 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类:

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字段。有人可以解释如何解决这个问题吗?它导致我的所有查询都失败了。谢谢!

1 个答案:

答案 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);
}