diff --git a/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/controller/MovieController.java b/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/controller/MovieController.java index 249e42a9c..f98793225 100644 --- a/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/controller/MovieController.java +++ b/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/controller/MovieController.java @@ -6,10 +6,8 @@ import org.neo4j.cineasts.domain.Rating; import org.neo4j.cineasts.domain.User; import org.neo4j.cineasts.repository.MovieRepository; import org.neo4j.cineasts.repository.PersonRepository; -import org.neo4j.cineasts.service.CineastsRepository; import org.neo4j.cineasts.service.CineastsUserDetailsService; import org.neo4j.cineasts.service.DatabasePopulator; -import org.neo4j.helpers.collection.IteratorUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -62,7 +60,7 @@ public class MovieController { model.addAttribute("stars", stars); Rating rating = null; if (user!=null) rating = movie.getRelationshipTo(user, Rating.class, "RATED"); - if (rating == null) rating = new Rating().rate(stars,null); + if (rating == null) rating = new Rating().rate(stars, null); model.addAttribute("userRating",rating); } return "/movies/show"; @@ -72,11 +70,7 @@ public class MovieController { public String updateMovie(Model model, @PathVariable String movieId, @RequestParam(value = "rated",required = false) Integer stars, @RequestParam(value = "comment",required = false) String comment) { Movie movie = movieRepository.findById(movieId); User user = userDetailsService.getUserFromSession(); - if (user != null && movie != null) { - int stars1 = stars==null ? -1 : stars; - String comment1 = comment!=null ? comment.trim() : null; - user.rate(movie, stars1, comment1); - } + userDetailsService.rate(user, movie, stars, comment); return singleMovieView(model,movieId); } diff --git a/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java b/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java index 3f4e81a67..094dc040c 100644 --- a/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java +++ b/spring-data-neo4j-examples/cineasts-aspects/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java @@ -1,5 +1,6 @@ package org.neo4j.cineasts.service; +import org.neo4j.cineasts.domain.Movie; import org.neo4j.cineasts.domain.User; import org.neo4j.cineasts.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -74,4 +75,12 @@ public class CineastsUserDetailsService implements UserDetailsService { user.addFriend(friend); } } + + @Transactional + public void rate(User user, Movie movie, Integer stars, String comment) { + if (user == null || movie == null) return; + int stars1 = stars==null ? -1 : stars; + String comment1 = comment!=null ? comment.trim() : null; + user.rate(movie, stars1, comment1); + } } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/MappingInfrastructureFactoryBean.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/MappingInfrastructureFactoryBean.java index 7d8f33b78..6cfb62ef2 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/MappingInfrastructureFactoryBean.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/MappingInfrastructureFactoryBean.java @@ -108,6 +108,9 @@ public class MappingInfrastructureFactoryBean implements FactoryBean implements @Override public R loadEntity(R entity, S source, MappingPolicy mappingPolicy, Neo4jPersistentEntityImpl persistentEntity, final Neo4jTemplate template) { if (mappingPolicy.shouldLoad()) { - final BeanWrapper, R> wrapper = BeanWrapper.create(entity, conversionService); + final BeanWrapper, R> wrapper = BeanWrapper., R>create(entity, conversionService); sourceStateTransmitter.copyPropertiesFrom(wrapper, source, persistentEntity,mappingPolicy, template); // 6) handle cascading fetches cascadeFetch(persistentEntity, wrapper, mappingPolicy, template); @@ -141,7 +141,7 @@ public class Neo4jEntityConverterImpl implements return; } - final BeanWrapper, T> wrapper = BeanWrapper.create(source, conversionService); + final BeanWrapper, T> wrapper = BeanWrapper., T>create(source, conversionService); if (sink == null) { sink = entityStateHandler.useOrCreateState(source,sink); // todo handling of changed state entityStateHandler.setPersistentState(source, sink); diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java index 4e487da5b..37a663ee9 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/mapping/Neo4jEntityFetchHandler.java @@ -55,7 +55,7 @@ public class Neo4jEntityFetchHandler { if (property.getTypeInformation().isCollectionLike()) { List replacement = new ArrayList(); for (Object inner : ((Iterable) value)) { - final BeanWrapper, Object> innerWrapper = BeanWrapper.create(inner, conversionService); + final BeanWrapper, Object> innerWrapper = BeanWrapper., Object>create(inner, conversionService); final PropertyContainer state = entityStateHandler.getPersistentState(inner); fetchValue(innerWrapper, state, persistentEntity, mappingPolicy, template); replacement.add(inner); @@ -63,7 +63,7 @@ public class Neo4jEntityFetchHandler { } return replacement; } else { - final BeanWrapper, Object> innerWrapper = BeanWrapper.create(value, conversionService); + final BeanWrapper, Object> innerWrapper = BeanWrapper., Object>create(value, conversionService); final PropertyContainer state = entityStateHandler.getPersistentState(value); fetchValue(innerWrapper, state, persistentEntity, mappingPolicy, template); // sourceStateTransmitter.copyPropertiesFrom(innerWrapper, entityStateHandler.getPersistentState(value), persistentEntity); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/template/Neo4jTemplateApiTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/template/Neo4jTemplateApiTest.java index e20775d57..953b4f628 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/template/Neo4jTemplateApiTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/template/Neo4jTemplateApiTest.java @@ -28,11 +28,13 @@ import org.neo4j.test.ImpermanentGraphDatabase; import org.springframework.dao.DataAccessException; import org.springframework.data.neo4j.conversion.ResultConverter; import org.springframework.data.neo4j.core.GraphDatabase; +import org.springframework.data.neo4j.model.Person; import org.springframework.data.neo4j.support.DelegatingGraphDatabase; import org.springframework.data.neo4j.support.Neo4jTemplate; import org.springframework.data.neo4j.support.index.IndexType; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.jta.JtaTransactionManager; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; @@ -89,6 +91,14 @@ public class Neo4jTemplateApiTest { assertNotNull(node.getProperty("name")); } + @Test + public void testInstantiateEntity() throws Exception { + Neo4jTemplate template = new Neo4jTemplate(graphDatabase,transactionManager); + Transaction tx = template.beginTx(); + Person michael = template.save(new Person("Michael", 37)); + assertNotNull(michael.getId()); + } + protected PlatformTransactionManager createTransactionManager() { return new JtaTransactionManager(new SpringTransactionManager(graphDatabaseService)); } diff --git a/src/docbkx/reference/programming-model/node-entities.xml b/src/docbkx/reference/programming-model/node-entities.xml index d51453549..54f148aca 100644 --- a/src/docbkx/reference/programming-model/node-entities.xml +++ b/src/docbkx/reference/programming-model/node-entities.xml @@ -119,7 +119,7 @@ public class Movie { @Graph on a node entity field (friend) where r.type = {relType} return friend", + @Query(value = "start n=node({self}) match (n)-[r]->(friend) where r.type = {relType} return friend", params = {"relType", "FRIEND"}) private Iterable friends; } diff --git a/src/docbkx/reference/setup.xml b/src/docbkx/reference/setup.xml index f37c3d0d7..1a8cc056f 100644 --- a/src/docbkx/reference/setup.xml +++ b/src/docbkx/reference/setup.xml @@ -258,7 +258,7 @@ repositories { ]]> - XML configuration with GraphDatabaseService bean + XML configuration with <ulink url="http://docs.neo4j.org/chunked/milestone/server-embedded.html">embedded Neo4j-Server</ulink> -]]> + + +// also add the static server-assets dependency to your pom.xml + + org.neo4j.app + neo4j-server + static-web + ${neo4j-version} + +]]>