【发布时间】:2015-05-15 07:43:26
【问题描述】:
我创建了一个简单的 SDN 项目来从我的数据库中检索现有节点。在存储库中,我使用 @Query 注释定义了一个自定义查询,类似于
@Query("MATCH (EMP:EMPLOYEE) WHERE EMP.empName={0} return EMP")
public Employee findByName(String empName);
@RelationshipEntity(type = "HAS_ADDRESS")
class AddressRelationShip
{
@GraphId
Long id;
@StartNode
Employee employee = null;
@EndNode
Address address = null;
public AddressRelationShip(Employee employee, Address address)
{
this.employee = employee;
this.address = address;
}
}
@NodeEntity
@TypeAlias("EMPLOYEE")
public class Employee
{
@GraphId
Long id;
String empName = null;
@RelatedTo(type = "HAS_ADDRESS", direction = Direction.OUTGOING)
@Fetch
Set<Address> addresses;
public void addressEmplployee(Address address)
{
if (addresses == null)
{
addresses = new HashSet<Address>();
}
//AddressRelationShip addressRelationShip = new AddressRelationShip(this, address);
addresses.add(address);
}
public Set<Address> getAddresses()
{
return addresses;
}
public void setAddresses(Set<Address> addresses)
{
this.addresses = addresses;
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getEmpName()
{
return empName;
}
public void setEmpName(String empName)
{
this.empName = empName;
}
}
使用此查询,在执行时我收到以下错误消息:
不存在主要的 SDN 标签 ..(即以 _ 开头的标签)
我搜索了这个问题并尝试使用以下查询:
MATCH (EMP:EMPLOYEE:_EMPLOYEE) WHERE EMP.EmployeeId={0} 返回 EMP
此查询运行但未返回任何响应。
这里有一件重要的事情是我没有使用 SDN 创建现有节点(我用 google 搜索并发现 SDN 添加了一些元数据,例如 _ 到节点/关系)。
但是,如果我使用 SDN 创建了 (Employee)-[HAS_ADDRESS]->(ADDRESS) 模式数据,则以下查询可以正常工作:
MATCH (EMP:EMPLOYEE) WHERE EMP.empName={0} 返回 EMP
在这种情况下,我发现了另一个问题,即它也返回了地址数据,而我只在查询中返回了 Employee。 我可以从 Employee 实体对象中获取地址。
对上述问题有什么建议吗?
PS - Neo4j 在独立服务器模式下运行。
问候, 拉胡尔
【问题讨论】:
-
我现在面临另一个人际关系问题。我的查询返回子句有一个节点,关系,另一个节点。我收到以下错误:org.neo4j.graphdb.NotFoundException:没有这样的属性,'type'。看来我需要以 relationshiptype 格式添加其他关系类型。但是我找不到对现有数据执行此操作的方法。谁能建议如何向现有关系添加新的关系类型?
标签: neo4j cypher spring-data-neo4j