Neo4j with Spring - лучший дизайн репозитория

В настоящее время я работаю над проектом на основе данных Spring Neo4j. Здесь, в большинстве узлов, может быть несколько типов различных отношений, как показано в примере ниже.

Определение узла

    @NodeEntity(label = CollectionNames.User)
    public class User{

        @GraphId
        private Long id;

        //Different Parameters, removed because these are irrelevant
        @Relationship(type = RelationshipNames.HAS_CONTACT, direction = Relationship.OUTGOING)
        private Set<HasContact> contactList;

        @Relationship(type = RelationshipNames.HAS_INVITED, direction = Relationship.OUTGOING)
        private Set<HasInvited> invitedContacts;

        @Relationship(type = RelationshipNames.HAS_FAVORITE, direction = Relationship.OUTGOING)
        private Set<HasFavorite> favoriteMerchants;

    //And so many others such relationships

    //Constructor and Getters() & Setters()
}

Определение хранилища

@Repository
public interface UserRepository extends GraphRepository<User>{

    List<User> findByUsernameIn(Set<String> username, @Depth int depth);//Here for exp, I just want to load user with his/her 'contactList' entries only
    User findByUsername(String username, @Depth int depth);
}

Хотя этот репозиторий работает нормально при загрузке данного пользователя с заданной глубиной, но основная проблема заключается в том, что этот запрос будет загружать все существующие отношения с заданной глубиной. Как здесь, я просто интересуюсь некоторыми / или только одним конкретным типом отношений, так как это может быть возможно с помощью методов Spring Named Query? Можно ли указать глубину для каждого отношения при загрузке с использованием методов именованных запросов? Или я должен написать собственный запрос для каждого такого отношения, используя аннотацию @Query? Мы хотим минимизировать использование пользовательских запросов!

Так что же является лучшим дизайном репозитория в Spring Data Neo4j для таких случаев? Предложение будет высоко оценено!

1 ответ

Решение

Начиная с версии SDN 4.2.x пользовательский запрос на шифрование в @Query или с помощью session.query это лучший вариант, если вы хотите избежать загрузки всех связанных объектов.

Работа над более мелкозернистой загрузкой ведется в следующем выпуске. Смотрите этот вопрос GitHu b.

Другие вопросы по тегам