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

sping-data neo4j:无法通过相关实体找到节点实体

慕容渊
2023-03-14

使用SpringDataNeo4j,我有两个节点实体:snippet和person。每个片段都有作者。以下是失败的类别和测试:

@NodeEntity
public class SnippetLink {
    @GraphId
    @GeneratedValue
    Long id;

    @Fetch
    @RelatedTo(type = "AUTHORED")
    @Indexed
    PersonLink author;

    @RelatedToVia(type = SnippetRelation.DERIVED_FROM)
    SnippetLink parent;

    Long documentId;

    public SnippetLink() {
    }

    public SnippetLink(PersonLink author, Long documentId) {
        this.author = author;
        this.documentId = documentId;
    }

    public PersonLink getAuthor() {
        return author;
    }

    public void setAuthor(PersonLink author) {
        this.author = author;
    }

    public Long getDocumentId() {
        return documentId;
    }

    public void setDocumentId(Long documentId) {
        this.documentId = documentId;
    }

    public SnippetLink getParent() {
        return parent;
    }

    public void setParent(SnippetLink parent) {
        this.parent = parent;
    }

    public SnippetRelation fork(PersonLink author) {
        SnippetLink child = new SnippetLink(author, documentId);
        return new SnippetRelation(this, child, SnippetRelation.Type.Fork);
    }

    public SnippetRelation revision(Long documentId) {
        SnippetLink child = new SnippetLink(getAuthor(), documentId);
        return new SnippetRelation(this, child, SnippetRelation.Type.Revision);
    }
}

.

@NodeEntity
public class PersonLink {
    @GraphId
    Long id;

    String login;

    String firstName;

    String lastName;

    public PersonLink() {
    }

    public PersonLink(String login, String firstName, String lastName) {
        this.login = login;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

.

public interface SnippetLinkRepository extends GraphRepository<SnippetLink>{
    Iterable<SnippetLink> findByAuthor(PersonLink author);
}

.

PersonLink author = template.save(new PersonLink("johns", "John", "Smith"));

SnippetLink snippet = template.save(new SnippetLink(author, -1L));

SnippetRelation revisionRelation = snippet.revision(-2L);
template.save(revisionRelation.getChild());
template.save(revisionRelation);

Iterable<SnippetLink> snippets = snippetLinkRepository.findByAuthor(author);
assertThat(snippets).hasSize(2);

共有1个答案

司寇望
2023-03-14
@RelatedToVia(type = SnippetRelation.DERIVED_FROM)
SnippetLink parent;

这应该是

@RelatedTo(type = SnippetRelation.DERIVED_FROM)
SnippetLink parent;

当您想要访问实体的关系(实体)时,使用RelatedToVia。但是,由于SnippetLink是一个实体,因此需要使用realatedTo。

 类似资料:
  • 我发现了SpringData1.6.0的奇怪行为(降级的版本1.5.2没有这个问题)。这个版本似乎严格要求实体管理器工厂bean的id为“entityManagerFactory”。如果不是,则在运行TestNG测试时出现此错误: 引起原因:org.springframework.beans.factory.BeanCreation异常:创建名为'jpaMapppingContext'的bean时

  • 我需要记录各种业务,他们的城市和他们在每个城市的分支机构。每个企业可能在不同的城市,在每个城市可能有不同的分支机构。

  • 我试图在Neo4j中插入两个节点之间的关系。我正在使用Neo4J(2.1.8社区) 我正在使用尝试创建员工经理关系。此关系实体是报表。(两个类都在下面给出) 但当我试图挽救这段感情的时候 我得到了例外作为 线程“main”组织中出现异常。springframework。刀。DataRetrievalFailureException:关系[0]没有propertyKey=“type”的属性。;嵌套的

  • null 这些类有各自的映射,在数据库模型中,这些表没有关联,在hibernate映射中也没有关联,但是在保存合同时,它必须在字段(业务规则)中具有相同的,但在某些情况下,也给出了没有验证的合同。 我的问题是当我运行HQL查询时: 但Hibernate使用交叉连接语句翻译并合并所有记录。是否有方法在文件中的非相关类之间执行HQL查询? 规则:不应是映射的实体。

  • 我有一个SpringBoot项目,它使用SpringDataREST生成我的rest接口,我正在尝试允许对嵌套资源进行分页。我遵循了这一解决方法,并陷入了实现findBy查询的困境。 我有以下设备实体: 我需要使用userId查询它: 因此,我在DevicePository中创建了以下方法: 但我在尝试向该endpoint发送请求时遇到以下异常: 有人能告诉我我做错了什么吗? 编辑:谢谢你的回复,

  • 问题内容: 在使用Hibernate的Spring MVC应用程序中,无法将在ManyToMany关系中连接两个实体的列表正确填充。实体是和。该实体有一个属性,它是名单的实体,而这是不正确填充。有人可以帮我弄清楚如何修正我的代码,以便实体开始正确填充吗? 未能正确填充ArrayList的控制器方法的代码如下: 前面代码中的命令输出以下内容: 从上面的输出可以看到,只有一个对象大于0 。尽管事实是每