moved index name out and added @Indexed.name
This commit is contained in:
@@ -59,10 +59,15 @@ class IndexingNodePropertyFieldAccessorListenerFactory implements FieldAccessorL
|
||||
|
||||
@Override
|
||||
public FieldAccessListener<NodeBacked,?> forField(final Field field) {
|
||||
return new IndexingNodePropertyFieldAccessorListener(field, graphDatabaseContext);
|
||||
return new IndexingNodePropertyFieldAccessorListener(field, graphDatabaseContext, getIndexName(field));
|
||||
}
|
||||
|
||||
/**
|
||||
private String getIndexName(Field field) {
|
||||
Indexed indexed = field.getAnnotation(Indexed.class);
|
||||
return indexed != null ? indexed.name() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @author Michael Hunger
|
||||
* @since 12.09.2010
|
||||
*/
|
||||
@@ -72,16 +77,18 @@ class IndexingNodePropertyFieldAccessorListenerFactory implements FieldAccessorL
|
||||
|
||||
protected final String indexKey;
|
||||
private final GraphDatabaseContext graphDatabaseContext;
|
||||
private String indexName;
|
||||
|
||||
public IndexingNodePropertyFieldAccessorListener(final Field field, final GraphDatabaseContext graphDatabaseContext) {
|
||||
public IndexingNodePropertyFieldAccessorListener(final Field field, final GraphDatabaseContext graphDatabaseContext, final String indexName) {
|
||||
this.indexKey = DelegatingFieldAccessorFactory.getNeo4jPropertyName(field);
|
||||
this.graphDatabaseContext = graphDatabaseContext;
|
||||
}
|
||||
this.indexName = indexName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void valueChanged(final NodeBacked nodeBacked, final Object oldVal, final Object newVal) {
|
||||
if (newVal==null) graphDatabaseContext.removeIndex(nodeBacked.getUnderlyingState(), indexKey );
|
||||
else graphDatabaseContext.index(nodeBacked.getUnderlyingState(), indexKey, newVal.toString());
|
||||
if (newVal==null) graphDatabaseContext.removeIndex(indexName, nodeBacked.getUnderlyingState(), indexKey);
|
||||
else graphDatabaseContext.index(indexName, nodeBacked.getUnderlyingState(), indexKey, newVal.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.springframework.data.graph.neo4j.fieldaccess;
|
||||
|
||||
import org.neo4j.graphdb.Node;
|
||||
import org.neo4j.graphdb.NotInTransactionException;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.dao.InvalidDataAccessResourceUsageException;
|
||||
import org.springframework.data.graph.annotation.GraphProperty;
|
||||
import org.springframework.data.graph.annotation.RelatedTo;
|
||||
@@ -108,7 +107,7 @@ public class PartialNodeEntityStateAccessors<ENTITY extends NodeBacked> extends
|
||||
final Object id = getId(entity,type);
|
||||
if (id == null) return;
|
||||
final String foreignId = createForeignId(id);
|
||||
Node node = graphDatabaseContext.getSingleIndexedNode(FOREIGN_ID, foreignId);
|
||||
Node node = graphDatabaseContext.getSingleIndexedNode("node", FOREIGN_ID, foreignId);
|
||||
if (node == null) {
|
||||
node = graphDatabaseContext.createNode();
|
||||
persistForeignId(node, id);
|
||||
@@ -129,7 +128,7 @@ public class PartialNodeEntityStateAccessors<ENTITY extends NodeBacked> extends
|
||||
if (!node.hasProperty(FOREIGN_ID) && id != null) {
|
||||
final String foreignId = createForeignId(id);
|
||||
node.setProperty(FOREIGN_ID, id);
|
||||
graphDatabaseContext.index(node, FOREIGN_ID, foreignId);
|
||||
graphDatabaseContext.index("node", node, FOREIGN_ID, foreignId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ public class Finder<T extends NodeBacked> {
|
||||
*/
|
||||
public T findByPropertyValue(final String property, final Object value) {
|
||||
try {
|
||||
final Node node = graphDatabaseContext.getSingleIndexedNode(property, value);
|
||||
final Node node = graphDatabaseContext.getSingleIndexedNode("node", property, value);
|
||||
if (node == null) return null;
|
||||
return graphDatabaseContext.createEntityFromState(node, clazz);
|
||||
} catch (NotFoundException e) {
|
||||
@@ -97,7 +97,7 @@ public class Finder<T extends NodeBacked> {
|
||||
*/
|
||||
public Iterable<T> findAllByPropertyValue(final String property, final Object value) {
|
||||
try {
|
||||
final IndexHits<Node> nodes = graphDatabaseContext.getIndexedNodes(property, value);
|
||||
final IndexHits<Node> nodes = graphDatabaseContext.getIndexedNodes("node", property, value);
|
||||
if (nodes == null) return Collections.emptyList();
|
||||
return new IterableWrapper<T, Node>(nodes) {
|
||||
@Override
|
||||
|
||||
@@ -53,8 +53,6 @@ public class GraphDatabaseContext {
|
||||
|
||||
public EntityInstantiator<RelationshipBacked, Relationship> relationshipEntityInstantiator;
|
||||
|
||||
private IndexManager indexManager;
|
||||
|
||||
private ConversionService conversionService;
|
||||
|
||||
private NodeTypeStrategy nodeTypeStrategy;
|
||||
@@ -117,16 +115,16 @@ public class GraphDatabaseContext {
|
||||
private IndexManager getIndexManager() {
|
||||
return graphDatabaseService.index();
|
||||
}
|
||||
public IndexHits<Node> getIndexedNodes(final String property, final Object value) {
|
||||
return getNodeIndex().get(property, value.toString());
|
||||
public IndexHits<Node> getIndexedNodes(final String indexName, final String property, final Object value) {
|
||||
return getNodeIndex(indexName).get(property, value.toString());
|
||||
}
|
||||
|
||||
private Index<Node> getNodeIndex() {
|
||||
return getIndexManager().forNodes("node");
|
||||
private Index<Node> getNodeIndex(final String indexName) {
|
||||
return getIndexManager().forNodes(indexName);
|
||||
}
|
||||
|
||||
public Node getSingleIndexedNode(final String property, final Object value) {
|
||||
IndexHits<Node> indexHits = getIndexedNodes(property, value);
|
||||
public Node getSingleIndexedNode(final String indexName, final String property, final Object value) {
|
||||
IndexHits<Node> indexHits = getIndexedNodes(indexName, property, value);
|
||||
return indexHits.hasNext() ? indexHits.next() : null;
|
||||
}
|
||||
|
||||
@@ -172,16 +170,16 @@ public class GraphDatabaseContext {
|
||||
}
|
||||
}
|
||||
|
||||
public void removeIndex(final Node node, final String propName) {
|
||||
getNodeIndex().remove(node, propName, null);
|
||||
public void removeIndex(final String indexName, final Node node, final String propName) {
|
||||
getNodeIndex(indexName).remove(node, propName, null);
|
||||
}
|
||||
|
||||
public void removeIndex(final String propName) {
|
||||
removeIndex(null,propName);
|
||||
public void removeIndex(final String indexName, final String propName) {
|
||||
removeIndex(indexName, null,propName);
|
||||
}
|
||||
|
||||
public void index(final Node node, final String propName, final Object newVal) {
|
||||
getNodeIndex().add(node, propName, newVal.toString());
|
||||
public void index(final String indexName, final Node node, final String propName, final Object newVal) {
|
||||
getNodeIndex(indexName).add(node, propName, newVal.toString());
|
||||
}
|
||||
|
||||
public boolean canConvert(final Class<?> from, final Class<?> to) {
|
||||
|
||||
@@ -33,7 +33,7 @@ public abstract class Neo4jHelper {
|
||||
}
|
||||
}
|
||||
for (String indexField : indexFieldsToRemove) {
|
||||
graphDatabaseContext.removeIndex(indexField);
|
||||
graphDatabaseContext.removeIndex("node", indexField);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import org.junit.runner.RunWith;
|
||||
import org.neo4j.graphdb.*;
|
||||
import org.neo4j.graphdb.traversal.TraversalDescription;
|
||||
import org.neo4j.helpers.collection.IteratorUtil;
|
||||
import org.neo4j.index.IndexService;
|
||||
import org.neo4j.kernel.Traversal;
|
||||
import org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -18,7 +17,6 @@ import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||
import org.springframework.data.graph.neo4j.*;
|
||||
import org.springframework.data.graph.neo4j.finder.Finder;
|
||||
import org.springframework.data.graph.neo4j.finder.FinderFactory;
|
||||
import org.springframework.data.graph.neo4j.support.GraphDatabaseContext;
|
||||
import org.springframework.data.graph.neo4j.support.node.Neo4jHelper;
|
||||
import org.springframework.data.graph.neo4j.Car;
|
||||
import org.springframework.data.graph.neo4j.Friendship;
|
||||
@@ -432,9 +430,9 @@ public class Neo4jGraphPersistenceTest {
|
||||
Group group = new Group();
|
||||
group.setName("test");
|
||||
final Finder<Group> finder = finderFactory.getFinderForClass(Group.class);
|
||||
graphDatabaseContext.removeIndex(group.getUnderlyingState(), "name");
|
||||
graphDatabaseContext.removeIndex("node", group.getUnderlyingState(), "name");
|
||||
final Group found = finder.findByPropertyValue("name", "test");
|
||||
assertNull("Group.name removed from index",found);
|
||||
assertNull("Group.name removed from index", found);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user