Graph Database Properties

Fields in classes are called properties. In this guide, you can consider properties synonymous with fields.

Working with Properties

In order to use properties in your application, you first need to create the class and set an instance. Once you have the class set, you can begin to work with properties on that class.

Creating Properties

You can define properties for that class. For instance,

// Retrieve Vertex
OrientVertexType accountVertex = graph.getVertexType("Account");

// Create Properties
accountVertex.createProperty("id", OType.INTEGER);
accountVertex.createProperty("birthDate", OType.DATE);

Bear in mind, each field must belong to a Type.

Dropping Properties

To drop a persistent class property, use the OClass.dropProperty() method. For instance,

accountVertex.dropProperty("name");

This drops the property name. OrientDB does not remove dropped properties from the record unless you delete them explicitly using the SQL UPDATE command with the REMOVE clause.

// Drop the Property
accountVertex.dropProperty("name");

// Remove the Records
database.command(new OCommandSQL("UPDATE Account REMOVE name").execute();

Using Constraints

Using constraints with a distributed database may cause unexpected results. Some operations execute in two steps: create and update, such as when creating an edge and then updating the vertex. Constraints like MANDATORY and NOTNULL against fields would fail on distributed databases during the creation phase.

OrientDB supports a number of constraints for each field:

ConstraintMethodDescription
Minimum ValuesetMin()Defines the minimum value. Property accepts strings and also works on date ranges.
Maximum ValuesetMax()Defines the maximum value. Property accepts strings and also works on date ranges.
MandatorysetMandatory()Defines whether the property must be specified.
Read OnlysetReadonly()Defines whether you can update the property after creating the record.
Not NullsetNotNull()Defines whether the property accepts null values.
UniqueDefines whether the property must be unique.
RegexDefines whether the property must satisfy a Regular Expressions value.
OrderedsetOrdered()Defines whether the edge list must be ordered, ensuring that a List is not used in place of a Set.

For example,

// Create Unique Nickname
profile.createProperty("nick", OType.STRING).setMin("3").setMax("30")
	.setMandatory(true).setNotNull(true);
profile.createIndex("nickIdx", OClass.INDEX_TYPE.UNIQUE, "nick");

// Create User Properties
profile.createProperty("name", OType.STRING).setMin("3").setMax("30");
profile.createProperty("surname", OType.STRING).setMin("3").setMax("30");
profile.createProperty("registeredOn", OType.DATE).setMin("2010-01-01 00:00:00");
profile.createProperty("lastAccessOn", OType.DATE).setMin("2010-01-01 00:00:00");

Indexes as Constraints

In order to set the property value to unique, use the UNIQUE index as a constraint by passing a Parameter object with the key type. For instance,

graph.createKeyIndex("id", Vertex.class, new Parameter("type", "UNIQUE"));

OrientDB applies this constraint to all vertex and subclass instances. To specify an index against a custom type, use the class parameter.

graph.createKeyIndex("name", Vertex.class, new Parameter("class", "Member"));

You can also define a unique index against a custom type:

graph.createKeyIndex("id", Vertex.class, new Parameter("type", "UNIQUE"), 
	new Parameter("class", "Member"));

You can then retrieve a vertex or an edge by key prefixing the class name to the field. For instance, using the about Member.name in place of only name, which allows you to use the index created against the filed name in the class Member.

for( Vertex v : graph.getVertices("Member.name", "Jay")) {
	System.out.println("Found vertex: " + v)
}

If the class name is not passed, then it uses V for the vertices and E for edges.

graph.getVertices("name", "Jay");
graph.getEdges("age", 20);

For more information, see