弹簧数据和mongodb与数组的@Query注释

时间:2015-05-21 05:38:14

标签: java spring mongodb spring-data

我有课:

public class Game {

@Id
private Integer gameId;

private int prize;
private int[] numbers;

//gets and sets

}

然后我有了mongorepository类:

public interface GameRepository extends MongoRepository<Game, Integer> {

    @Query(value = "{ 'numbers' : {$all : [?0] }}")
    public List<JogoLotoFacil> myFind(int[] numbers);

}

当我直接在mongodb上执行查询时,我得到了我想要的结果,但是在带有spring数据的java上运行我总是得到一个空列表。

如果我运行findAll(),我会得到最正确的列表。

问题是:是否可以将@Query用于数组?

1 个答案:

答案 0 :(得分:0)

客户 @Query 注释对于某些运营商而言是错误的。建议创建自己的自定义接口和实现类,以使用MongoTemplate执行自定义查询。例如,创建一个名称附加自定义的接口:

public interface GameRepositoryCustom {
    public List<JogoLotoFacil> myFind(int[] numbers); 
}

修改GameRepository并添加要扩展的GameRepositoryCustom接口:

@Repository
public interface GameRepository extends GameRepositoryCustom, MongoRepository {

}

创建实现类以实现GameRepositoryCustom interface。

中定义的方法
public class GameRepositoryImpl implements GameRepositoryCustom {

    @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public List<JogoLotoFacil> myFind(int[] numbers) {
        return mongoTemplate.find(
            Query.query(Criteria.where("numbers").all(numbers)), Game.class);
    }
}