我有课:
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用于数组?
答案 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);
}
}