diff --git a/changelog.txt b/changelog.txt
index 3243a57ca..443f9a248 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -16,6 +16,8 @@ Changes in version 1.0.0.M4 (2011-03-14)
* added EntityEvaluator for entity based path evaluation
* error handling for node type strategy called on non type nodes
* FieldTraversalDescriptionBuilder build method parametrization
+* re-enabled cross-store persistence
+* removed the need to mark graph managed fields with @Transient for a cross store entity
Changes in version 1.0.0.M3 (2011-02-25)
----------------------------------------
diff --git a/spring-data-graph-parent/pom.xml b/spring-data-graph-parent/pom.xml
index 2a92334ff..dbedc3d67 100644
--- a/spring-data-graph-parent/pom.xml
+++ b/spring-data-graph-parent/pom.xml
@@ -327,6 +327,7 @@
maven-surefire-plugin
2.6
+ always
true
**/*Tests.java
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/BackReferences.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/BackReferences.java
index b26a7500f..b423621ee 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/BackReferences.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/BackReferences.java
@@ -1,10 +1,8 @@
package org.springframework.data.graph.neo4j.fieldaccess;
-import org.springframework.data.graph.annotation.RelatedTo;
import org.springframework.data.graph.core.GraphBacked;
import org.springframework.data.graph.core.NodeBacked;
-import java.lang.reflect.Field;
import java.util.*;
/**
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DefaultEntityState.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DefaultEntityState.java
index 395e09ef3..ce2615b71 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DefaultEntityState.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DefaultEntityState.java
@@ -91,7 +91,7 @@ public abstract class DefaultEntityState, STAT
return result;
}
- private FieldAccessor accessorFor(final Field field) {
+ protected FieldAccessor accessorFor(final Field field) {
return fieldAccessors.get(field);
}
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DetachedEntityState.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DetachedEntityState.java
index 07444746a..a4646ec41 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DetachedEntityState.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/DetachedEntityState.java
@@ -79,7 +79,7 @@ public class DetachedEntityState, STATE> imple
return delegate.getValue(field);
}
- private boolean isDetached() {
+ protected boolean isDetached() {
return !transactionIsRunning() || !hasPersistentState() || isDirty();
}
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeEntityStateFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeEntityStateFactory.java
index a747a110e..f36fdfe77 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeEntityStateFactory.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeEntityStateFactory.java
@@ -22,6 +22,8 @@ import org.springframework.data.graph.core.NodeBacked;
import org.springframework.data.graph.neo4j.finder.FinderFactory;
import org.springframework.data.graph.neo4j.support.GraphDatabaseContext;
+import java.lang.reflect.Field;
+
import static org.springframework.data.graph.neo4j.fieldaccess.PartialNodeEntityState.getId;
public class NodeEntityStateFactory {
@@ -38,8 +40,8 @@ public class NodeEntityStateFactory {
PartialNodeEntityState partialNodeEntityState = new PartialNodeEntityState(null, entity, entity.getClass(), graphDatabaseContext, finderFactory);
return new DetachedEntityState(partialNodeEntityState, graphDatabaseContext) {
@Override
- protected boolean transactionIsRunning() {
- return super.transactionIsRunning() && getId(entity, entity.getClass()) != null;
+ protected boolean isDetached() {
+ return super.isDetached() || getId(entity, entity.getClass()) == null;
}
};
} else {
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PartialNodeEntityState.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PartialNodeEntityState.java
index 89c4bd0eb..8deed8dcf 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PartialNodeEntityState.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/PartialNodeEntityState.java
@@ -18,7 +18,6 @@ package org.springframework.data.graph.neo4j.fieldaccess;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.NotInTransactionException;
-import org.neo4j.graphdb.PropertyContainer;
import org.neo4j.graphdb.index.Index;
import org.neo4j.graphdb.index.IndexHits;
import org.springframework.dao.InvalidDataAccessResourceUsageException;
@@ -141,6 +140,13 @@ public class PartialNodeEntityState extends DefaultEn
return entity;
}
+ @Override
+ public boolean isWritable(Field field) {
+ final FieldAccessor accessor = accessorFor(field);
+ if (accessor == null) return false; // difference to default behaviour, we don't care for non-managed fields here
+ return accessor.isWriteable(entity);
+ }
+
private void persistForeignId(Node node, Object id) {
if (!node.hasProperty(FOREIGN_ID) && id != null) {
final String foreignId = createForeignId(id);
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/NodeFinder.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/NodeFinder.java
index 796eabb59..ab6f45930 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/NodeFinder.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/NodeFinder.java
@@ -17,7 +17,6 @@
package org.springframework.data.graph.neo4j.finder;
import org.neo4j.graphdb.Node;
-import org.neo4j.graphdb.index.Index;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.springframework.data.graph.core.GraphBacked;
import org.springframework.data.graph.core.NodeBacked;
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/node/Neo4jNodeBacking.aj b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/node/Neo4jNodeBacking.aj
index 902e7fcbb..81f31e08b 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/node/Neo4jNodeBacking.aj
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/node/Neo4jNodeBacking.aj
@@ -30,6 +30,9 @@ import org.springframework.data.graph.core.RelationshipBacked;
import org.springframework.data.graph.neo4j.fieldaccess.*;
import org.springframework.data.graph.neo4j.support.GraphDatabaseContext;
import org.springframework.data.graph.annotation.*;
+import javax.persistence.Transient;
+import javax.persistence.Entity;
+
import java.lang.reflect.Field;
import static org.springframework.data.graph.neo4j.fieldaccess.DoReturn.unwrap;
@@ -48,6 +51,13 @@ public aspect Neo4jNodeBacking { // extends AbstractTypeAnnotatingMixinFields recommendations;
@RelatedTo(type = "friends", elementClass = User.class)
- @Transient
Set friends;
public Recommendation rate(Restaurant restaurant, int stars, String comment) {
diff --git a/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml b/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml
index fd06c5e34..b86ea1633 100644
--- a/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml
+++ b/spring-data-neo4j/src/test/resources/org/springframework/data/graph/neo4j/support/Neo4jGraphPersistenceTest-context.xml
@@ -37,7 +37,7 @@
method). Roo applications use this useful feature in a number of
areas, such as @PersistenceContext injection into entities.
-->
-
+
-
+