diff --git a/src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java b/src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java new file mode 100644 index 000000000..7cb783194 --- /dev/null +++ b/src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java @@ -0,0 +1,19 @@ +package org.springframework.datastore.graph.api; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Michael Hunger + * @since 27.08.2010 + * indexing true by default + * implies automatic conversion + * TODO support for custom converter class + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface GraphEntityProperty { + boolean index() default true; +} diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj index 4ac54de8f..da8123696 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj +++ b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj @@ -17,6 +17,7 @@ import org.neo4j.kernel.EmbeddedGraphDatabase; import org.neo4j.util.GraphDatabaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.InvalidDataAccessResourceUsageException; +import org.springframework.datastore.graph.api.GraphEntityProperty; import org.springframework.datastore.graph.api.NodeBacked; import org.springframework.datastore.graph.api.RelationshipBacked; @@ -390,8 +391,9 @@ public aspect Neo4jNodeBacking extends AbstractTypeAnnotatingMixinFields { diff --git a/src/test/java/org/springframework/datastore/graph/neo4j/Person.java b/src/test/java/org/springframework/datastore/graph/neo4j/Person.java index 322cfd149..333b4a5d2 100644 --- a/src/test/java/org/springframework/datastore/graph/neo4j/Person.java +++ b/src/test/java/org/springframework/datastore/graph/neo4j/Person.java @@ -2,17 +2,15 @@ package org.springframework.datastore.graph.neo4j; import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.Relationship; -import org.springframework.datastore.graph.api.Direction; -import org.springframework.datastore.graph.api.GraphEntity; -import org.springframework.datastore.graph.api.GraphEntityRelationship; -import org.springframework.datastore.graph.api.GraphEntityRelationshipEntity; +import org.springframework.datastore.graph.api.*; @GraphEntity(useShortNames = false) public class Person { private Long id; - + + @GraphEntityProperty(index = true) private String name; private int age; diff --git a/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java b/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java index 849a76516..adf02150b 100644 --- a/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java +++ b/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java @@ -425,6 +425,14 @@ public class Neo4jGraphPersistenceTest { final Collection result = IteratorUtil.addToCollection(found.iterator(), new HashSet()); Assert.assertEquals(new HashSet(Arrays.asList(group,group2)), result); } + @Test + @Transactional + public void testFindAllPersonByIndexOnAnnotatedField() { + Person person = new Person("Michael",35); + final Finder finder = finderFactory.getFinderForClass(Person.class); + final Person found = finder.findByPropertyValue("Person.name", "Michael"); + Assert.assertEquals(person, found); + } @Test @Transactional public void testTraverseFromGroupToPeople() {