Relationship (Neo4j Community 1.8.RC1 API)
Date: 2012-09-07

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Neo4j Community
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.neo4j.graphdb
Interface Relationship

All Superinterfaces:
  PropertyContainer

    public interface Relationship

extends PropertyContainer

A relationship between two nodes in the graph. A relationship has a start node, an end node and a `type`. You can attach properties to relationships with the API specified in `PropertyContainer`.

Relationships are created by invoking the `Node.createRelationshipTo()` method on a node as follows:

`Relationship rel = node.`createRelationshipTo`( otherNode, MyRels.REL_TYPE );`

The fact that the relationship API gives meaning to `start` and `end` nodes implicitly means that all relationships have a direction. In the example above, `rel` would be directed from `node` to `otherNode`. A relationship's start node and end node and their relation to `Direction.OUTGOING` and `Direction.INCOMING` are defined so that the assertions in the following code are `true`:

     Node a = graphDb.createNode(), b = graphDb.createNode();
     Relationship rel = a.createRelationshipTo( b, MyRels.REL_TYPE );
     // Now we have: (a) --- REL_TYPE ---> (b)

     assert rel.getStartNode().equals( a );
     assert rel.getEndNode().equals( b );
     assert rel.getNodes()[0].equals( a ) && rel.getNodes()[1].equals( b );

Even though all relationships have a direction they are equally well traversed in both directions so there's no need to create duplicate relationships in the opposite direction (with regard to traversal or performance).

Furthermore, Neo4j guarantees that a relationship is never "hanging freely," i.e. `getStartNode()`, `getEndNode()`, `getOtherNode(Node)` and `getNodes()` are guaranteed to always return valid, non-null nodes.

The id of a relationship is unique, but may not be unique over time since neo4j reuses deleted ids. See http://wiki.neo4j.org/content/Id_Reuse

Method Summary
`void` | `delete()` Deletes this relationship.
`Node` | `getEndNode()` Returns the end node of this relationship.
`long` | `getId()` Returns the unique id of this relationship.
`Node[]` | `getNodes()` Returns the two nodes that are attached to this relationship.
`Node` | `getOtherNode(Node node)` A convenience operation that, given a node that is attached to this relationship, returns the other node.
`Node` | `getStartNode()` Returns the start node of this relationship.
`RelationshipType` | `getType()` Returns the type of this relationship.
`boolean` | `isType(RelationshipType type)` Indicates whether this relationship is of the type `type`.

Methods inherited from interface org.neo4j.graphdb.PropertyContainer
`getGraphDatabase, getProperty, getProperty, getPropertyKeys, getPropertyValues, hasProperty, removeProperty, setProperty`

Method Detail

### getId

    long getId()

  Returns the unique id of this relationship. Ids are garbage collected over time so they are only guaranteed to be unique during a specific time span: if the relationship is deleted, it's likely that a new relationship at some point will get the old id. This makes relationship ids brittle as public APIs.

  Returns:
    the id of this node

### delete

    void delete()

  Deletes this relationship. Invoking any methods on this relationship after `delete()` has returned is invalid and will lead to unspecified behavior.

### getStartNode

    Node getStartNode()

  Returns the start node of this relationship. For a definition of how start node relates to `directions` as arguments to the `relationship accessors` in Node, see the class documentation of Relationship.

  Returns:
    the start node of this relationship

### getEndNode

    Node getEndNode()

  Returns the end node of this relationship. For a definition of how end node relates to `directions` as arguments to the `relationship accessors` in Node, see the class documentation of Relationship.

  Returns:
    the end node of this relationship

### getOtherNode

    Node getOtherNode(Node node)

  A convenience operation that, given a node that is attached to this relationship, returns the other node. For example if `node` is a start node, the end node will be returned, and vice versa. This is a very convenient operation when you're manually traversing the node space by invoking one of the `getRelationships()` operations on a node. For example, to get the node "at the other end" of a relationship, use the following:

  `Node endNode = node.getSingleRelationship( MyRels.REL_TYPE ).getOtherNode( node );`

  This operation will throw a runtime exception if `node` is neither this relationship's start node nor its end node.

  Parameters:
    `node` - the start or end node of this relationship
  Returns:
    the other node
  Throws:
    `RuntimeException` - if the given node is neither the start nor end node of this relationship

### getNodes

    Node[] getNodes()

  Returns the two nodes that are attached to this relationship. The first element in the array will be the start node, the second element the end node.

  Returns:
    the two nodes that are attached to this relationship

### getType

    RelationshipType getType()

  Returns the type of this relationship. A relationship's type is an immutable attribute that is specified at Relationship `creation`. Remember that relationship types are semantically equivalent if their `names` are `equal`. This is NOT the same as checking for identity equality using the == operator. If you want to know whether this relationship is of a certain type, use the `isType()` operation.

  Returns:
    the type of this relationship

### isType

    boolean isType(RelationshipType type)

  Indicates whether this relationship is of the type `type`. This is a convenience method that checks for equality using the contract specified by RelationshipType, i.e. by checking for equal `names`.

  Parameters:
    `type` - the type to check
  Returns:
    `true` if this relationship is of the type `type`, `false` otherwise or if `null`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Neo4j Community
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2002-2012 The Neo4j Graph Database Project. All Rights Reserved.