我正在使用带有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();
}
}
我做错了什么?
答案 0 :(得分:1)
在这种情况下,在同一类型的节点之间有两个不同方向的关系,首先,请确保使用@Iffiation注释两个字段以及setter / accessor方法,指定方向。
对象模型中的 Site
引用了父对象和子对象,但是当您创建网站时,它们似乎与模型不一致。 Subsite1
和Subsite2
都将父母设置为site1
,但site
没有其子女的记录(应该是子网站)。如果你的对象和图形模型是一致的,那么应该可以工作。