当前位置: 首页 > 知识库问答 >
问题:

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

柳深
2023-03-14

目前我正在从事基于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命名的查询方法实现这一点呢?在使用命名查询方法加载时,是否可以为每个关系指定深度?或者我必须使用@query注释为每个这样的关系编写自定义查询?我们希望尽量减少自定义查询的使用!

那么,对于这种情况,Spring Data Neo4j中最好的存储库设计是什么?建议将高度赞赏!

共有1个答案

许俊风
2023-03-14

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

在即将发布的版本中,正在进行更细粒度加载的工作。看到这个github问题。

 类似资料:
  • 问题内容: 我创建了一个简单的存储库,其中包含系统中的所有人员,一切似乎都正常运行。我可以根据给定的键和值添加,删除甚至取回单个人,但是由于某种原因,我无法直接取回存储在存储库中的所有人。我尝试通过使用findAll()方法来执行此操作,该方法应返回一个可迭代的对象。然后,我尝试使用可迭代对象进行迭代,并将每个人存储在要函数返回的arraylist中。 打印线打印“ 3”,因此存储库不为空,但在以

  • 我希望像查询NodeEntity一样查询RelationshipEntity。 软件包信息: 此存储库不工作。 getEmployeeWorkingOnProject(String,String)返回NULL 我在关键字之后进行了修改,例如将其从修改为像这样的别名,并且还尝试更改了返回中别名的顺序。 我希望获得与特定员工和特定项目相关联的所有状态(边缘)。 或 或其他类型的类似结果,其中关系实体持

  • 我已经实现了一个小用例来评估Spring Data Neo4j。我有一个接口,它扩展了GraphRepository。 界面是这样的: 这给了我错误< code >“类型PublicRepository的层次结构不一致”。 这种类型的错误是因为当前类扩展/实现的类/接口之一不存在,而当前类又在扩展/实现另一个类/接口。 查看核心库的包我发现库中没有扩展为CRUDRepository的接口。我在Ne

  • 问题内容: 我正在使用maven和Jenkins进行自动构建。我正在寻找最佳的Maven开源存储库管理。这样我就可以通过存储库管理器在Maven和jenkins之间进行整合。 问题答案: 我至少知道三个选择 sonatype products archiva.apache(Apache Archiva) 我已经使用了所有三个,每个都有优点和缺点。 我会选择Nexus,因为它得到了Sonatype的

  • 我在使用spring-data-neo4j的项目中遇到了一些问题。我有一个节点实体类: 并使用以下方法为其创建存储库: 然后测试,就像这样: > 创建id为123456的广告节点,包含关键字1和关键字2-ok 创建id为654321且包含关键字1的广告节点-确定 获取广告ID 654321-工作正常,生成的查询是: 开始=节点:(={0})返回params{0=654321} 使用findSimi

  • 我是Spring data neo4j的新手,我对GraphRepository有一些错误/问题。 我第一次有了这个: 但是阅读一些文档,存储库已经提供了这样的方法。我不需要写它们。 这是我的产品域名。 这是我的实验班 未检测到查找字节 Id 这正常吗? 这是我的pom.xml