带Spring的Neo4j-最佳存储库设计

带Spring的Neo4j-最佳存储库设计,spring,spring-boot,neo4j,spring-data-neo4j,spring-repositories,Spring,Spring Boot,Neo4j,Spring Data Neo4j,Spring Repositories,目前我正在从事基于Spring数据Neo4j的项目。在大多数节点中,可以有多种类型的不同关系,如下面的示例所示 节点定义 @NodeEntity(label=CollectionNames.User) 公共类用户{ @格拉希德 私人长id; //不同的参数,已删除,因为这些参数不相关 @关系(类型=RelationshipNames.HAS\u联系人,方向=Relationship.OUTGOING) 私人设置联系人列表; @关系(类型=RelationshipNames.HAS\u邀请,方向=

目前我正在从事基于Spring数据Neo4j的项目。在大多数节点中,可以有多种类型的不同关系,如下面的示例所示

节点定义
@NodeEntity(label=CollectionNames.User)
公共类用户{
@格拉希德
私人长id;
//不同的参数,已删除,因为这些参数不相关
@关系(类型=RelationshipNames.HAS\u联系人,方向=Relationship.OUTGOING)
私人设置联系人列表;
@关系(类型=RelationshipNames.HAS\u邀请,方向=Relationship.OUTGOING)
私人设置受邀联系人;
@关系(类型=RelationshipNames.HAS\u FAVORITE,方向=Relationship.OUTGOING)
私有集偏爱项控制器;
//还有很多其他的关系
//构造函数和Getters()&Setters()
}
存储库定义
@存储库
公共接口UserRepository扩展了GraphRespository{
List findByUsernameIn(Set username,@Depth int Depth);//这里是exp,我只想用他/她的“联系人列表”条目加载用户
用户findByUsername(字符串用户名@Depth int Depth);
}
虽然在加载具有给定深度的给定用户时,此存储库工作正常,但主要问题是此查询将加载具有给定深度的所有现有关系。在这里,我只对某些/或一种特定类型的关系感兴趣,那么如何使用Spring命名的查询方法实现这一点呢?在使用命名查询方法加载时,是否可以为每个关系指定深度?或者我必须使用@query注释为每个这样的关系编写自定义查询?我们希望尽量减少自定义查询的使用

那么,对于这种情况,SpringDataNeo4j中最好的存储库设计是什么呢?
建议将不胜感激

自SDN版本4.2.x起,在
@query
中或通过使用
会话进行自定义密码查询。如果希望避免加载所有相关实体,则最好选择query


在即将发布的版本中,正在进行更细粒度的加载工作。请参阅。

好的,谢谢您的回复!但是你能告诉我这个功能将在哪个版本中实现吗?或者需要多少时间?
    @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);
}