Интеграция Spring Data для ArangoDb возвращает пустой список результатов по запросам - PullRequest
0 голосов
/ 03 февраля 2020

Когда я использую запросы из имен методов с интеграцией ArangoDb и Spring Data, я всегда получаю пустые списки. В чем проблема в том, как я использую? Это пример.

Это сущности:

Авторизация:

@Document("authorizations")
@Data // (Lombok)
public class Authorization {

  @Id
  private String id;

  private String caption;

  @Relations(edges = com.picktur.server.relations.UserAuthorized.class, lazy = true)
  private User user;

}

Пользователь:

@Document("users")
@Data @NoArgsConstructor // (Lombok)
public class User {

  @Id
  private String id;

  private String username;

  @Relations(edges = com.picktur.server.relations.UserAuthorized.class, lazy = true)
  private Collection<Authorization> authorizations;

}

Репозиторий авторизации:

public interface AuthorizationRepo extends ArangoRepository<Authorization, String> {

  Iterable<Authorization> findAllByUser(User user);

}

Граница между пользователем и авторизацией:

@Edge
@Data
public class UserAuthorized {

  @Id
  private String id;

  @From
  private User user;

  @To
  private Authorization authorization;

public UserAuthorized( User user, Authorization authorization) {
    this.authorizedPhoto = user;
    this.authorization = authorization;
}

}

Репозиторий для UserAuthorized Egde:

public interface UserAuthorizedRepo extends ArangoRepository<UserAuthorized, String> {

}

Данные Журналы постоянства c:

    User user = get_user_from_security_context();
    Authorization authorization = new Authorization();        
    authorization.setUser(user);
    ...
    authorization = authorizationRepo.save(authorization);

    UserAuthorized userAuthorized = new UserAuthorized(user, authorization);
    userAuthorizedRepo.save(userAuthorized);

Запрос с пустым результатом:

Iterable<Authorization> authorizations = authorizationRepo.findAllByUser(user);

Все документы и ребра существуют в БД, но результат пуст.

1 Ответ

1 голос
/ 12 февраля 2020

При выводе запроса генерируется AQL-запрос по полям документа, например. в случае findAllByUser он выполняет запрос AQL, такой как:

FOR a IN authorizations FILTER a.user == @user RETURN a

, который, очевидно, возвращает пустой массив.

Вы можете проверить сгенерированный запрос, включив журнал отладки глобальный уровень в вашем логбеке. xml.

В соответствии с вашей моделью данных, чтобы получить все полномочия данного пользователя, вы должны выполнить что-то вроде этого:

User user = userRepo.findById(userId).get();
Iterable<Authorization> authorizations = user.getAuthorizations();
...