只能涉及一个元素

时间:2016-09-06 21:47:17

标签: neo4j neo4j-ogm

我正在使用带有Java的Neo4j OGM 2.0.4驱动程序。我在向元素添加多个关系时遇到了麻烦。

我这样做:

Site site1 = new Site();
site1.setTitle("Site 1");
site1.setHtmlCode("Content of site 1");
Site site2 = new Site();

Site subsite1  = new Site();
subsite1.setTitle("Subsite 1");
subsite1.setHtmlCode("Content of subsite 1");
subsite1.setParent(site1);

Site subsite2  = new Site();
subsite2.setTitle("Subsite 2");
subsite2.setHtmlCode("Content of subsite 2");
subsite2.setParent(site1);

session.deleteAll(Site.class);

session.save(site1);

session.save(subsite1);
session.save(subsite2);

当我想要显示所有站点节点(在localhost:7474上)然后"子站点1"没有关系。

@NodeEntity
public class Site extends Entity
{
  private String _title;
  private String _htmlCode;

  @Relationship(type = "SITE_CREATED_BY")
  Author _author;

  @Relationship(type = "IS_CHILD")
  Set<Site> _parentSite;

  @Relationship(type = "IS_CHILD", direction = Relationship.INCOMING)
  Set<Site> _childSites;

  public Site()
  {
    _parentSite = new HashSet();
    _childSites = new HashSet();
  }

  public void setTitle(String title)
  {
    _title = title;
  }

  public String getTitle()
  {
    return _title;
  }

  public void setHtmlCode(String htmlCode)
  {
    _htmlCode = htmlCode;
  }

  public String getHtmlCode()
  {
    return _htmlCode;
  }

  public void setAuthor(Author author)
  {
    _author = author;
  }

  public void setParent(Site site)
  {
    _parentSite.add(site);
  }
}

实体:     公共抽象类实体     {       私人长身份;       私人决赛ZonedDateTime _dateOfCreation;

  Entity()
  {
    _dateOfCreation = ZonedDateTime.now();
  }

  public Long getId()
  {
    return id;
  }

  public ZonedDateTime getDateOfCreation()
  {
    return _dateOfCreation;
  }

  @Override
  public boolean equals(Object o)
  {
    if (this == o) return true;
    if (o == null || id == null || getClass() != o.getClass()) return false;

    Entity entity = (Entity) o;

    return id.equals(entity.id);
  }

  @Override
  public int hashCode()
  {
    return (id == null) ? -1 : id.hashCode();
  }
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在这种情况下,在同一类型的节点之间有两个不同方向的关系,首先,请确保使用@Iffiation注释两个字段以及setter / accessor方法,指定方向。

对象模型中的

Site引用了父对象和子对象,但是当您创建网站时,它们似乎与模型不一致。 Subsite1Subsite2都将父母设置为site1,但site没有其子女的记录(应该是子网站)。如果你的对象和图形模型是一致的,那么应该可以工作。