Spring MongoRepository @Query JSONParseException

У меня есть следующие объекты MongoDB:

public class Player {

    @Id 
    private String id;

    private String username;

    private int rating;

    private boolean active;
}

public class Match {

    @Id
    private String id;

    @DBRef
    private Player playerOne;

    @DBRef
    private Player playerTwo;
}

Я пытаюсь получить все матчи игрока. Это означает, что, например, у меня есть текущий игрок, и список матчей должен быть возвращен для матчей, когда playerOne == текущий игрок или playerTwo == текущий игрок. Я использовал MongoRepository для этого:

public interface MatchRepository extends MongoRepository<Match, String> {

    @Query(value = "{'$or': [{'playerOne.id': ?0}, {'playerTwo.id': ?0}]}")
    List<Match> findByPlayerId(String playerId);
} 

Когда я выполнил метод findByPlayerId, я получил следующую ошибку:

Caused by: com.mongodb.util.JSONParseException: {'$or': [{'playerOne.id': "58ea191756a4302290fff9b1"}, {'playerTwo.id': "58ea191756a4302290fff9b1"0}]}

Я заметил странный символ 0 в конце сообщения об ошибке: "0}]}

Я также сделал обходной путь и передал тот же player.id в качестве второго аргумента метода, и он отлично работает:

@Query(value = "{'$or': [{'playerOne.id': ?0}, {'playerTwo.id': ?1}]}")
List<Match> findByPlayerId(String playerId, String palyerId2);

У вас есть идеи, почему первый подход возвращает JSONParseException?


person Tomasz Morek    schedule 09.04.2017    source источник
comment
Какую версию spring boot или spring-data-mongodb вы используете?   -  person Jean-Philippe Bond    schedule 09.04.2017
comment
Я использую весеннюю загрузку 1.5.1.RELEASE.   -  person Tomasz Morek    schedule 09.04.2017


Ответы (1)


Вот билет, покрывающий это изменение. Это было решено и выпущено. Попробуйте загрузочную версию 1.5.2 и выше или Spring Mongo 1.10.1 и выше.

https://jira.spring.io/browse/DATAMONGO-1603.

person s7vr    schedule 09.04.2017
comment
Отлично, после обновления до 1.5.2 все работает как положено. Спасибо за помощь. - person Tomasz Morek; 10.04.2017