#131 - Added Spring Data Neo4j example.

Original pull requests: #129, #130.
This commit is contained in:
Luanne Misquitta
2015-09-03 16:41:27 +05:30
committed by Oliver Gierke
parent 0c1bee04b3
commit f90bed38e2
10 changed files with 425 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example.springdata.neo4j.domain;
import java.util.HashSet;
import java.util.Set;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
/**
* An Actor node entity.
*
* @author Luanne Misquitta
*/
@NodeEntity(label = "Actor")
public class Actor {
@GraphId private Long id;
private String name;
@Relationship(type = "ACTED_IN")
private Set<Role> roles = new HashSet<>();
public Actor() {
}
public Actor(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Long getId() {
return id;
}
public Set<Role> getRoles() {
return roles;
}
public void actedIn(Movie movie, String roleName) {
Role role = new Role();
role.setRole(roleName);
role.setActor(this);
role.setMovie(movie);
roles.add(role);
movie.getRoles().add(role);
}
}

View File

@@ -0,0 +1,60 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example.springdata.neo4j.domain;
import java.util.HashSet;
import java.util.Set;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
/**
* A Movie node entity.
*
* @author Luanne Misquitta
*/
@NodeEntity(label = "Movie")
public class Movie {
@GraphId private Long id;
private String title;
@Relationship(type = "ACTED_IN", direction = "INCOMING")
private Set<Role> roles = new HashSet<>();
public Movie() {
}
public Movie(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Relationship(type = "ACTED_IN", direction = "INCOMING")
public Set<Role> getRoles() {
return roles;
}
}

View File

@@ -0,0 +1,61 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example.springdata.neo4j.domain;
import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;
/**
* A Role relationship entity between an actor and movie.
* @author Luanne Misquitta
*/
@RelationshipEntity(type = "ACTED_IN")
public class Role {
@GraphId private Long id;
@StartNode private Actor actor;
@EndNode private Movie movie;
private String role;
public Role() {
}
public Actor getActor() {
return actor;
}
public void setActor(Actor actor) {
this.actor = actor;
}
public Movie getMovie() {
return movie;
}
public void setMovie(Movie movie) {
this.movie = movie;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example.springdata.neo4j.repo;
import example.springdata.neo4j.domain.Actor;
import org.springframework.data.neo4j.repository.GraphRepository;
/**
* GraphRepository for Actors.
* @author Luanne Misquitta
*/
public interface ActorRepository extends GraphRepository<Actor> {
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example.springdata.neo4j;
import static org.junit.Assert.*;
import example.springdata.neo4j.domain.Actor;
import example.springdata.neo4j.domain.Movie;
import example.springdata.neo4j.domain.Role;
import example.springdata.neo4j.repo.ActorRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Simple integration test demonstrating the use of the ActorRepository
* @author Luanne Misquitta
*/
@ContextConfiguration(classes = {ExampleConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class ActorRepositoryIntegrationTest {
@Autowired ActorRepository actorRepository;
/**
* @see DATAGRAPH-752
* Test case to demonstrate saving node and relationship entities, and loading them via the repository.
*/
@Test
public void shouldBeAbleToSaveAndLoadActor() {
Actor daniel = new Actor("Daniel Radcliffe");
Movie goblet = new Movie("Harry Potter and the Goblet of Fire");
daniel.actedIn(goblet,"Harry Potter");
actorRepository.save(daniel); //saves the actor and the movie
Actor actor = actorRepository.findOne(daniel.getId());
assertNotNull(actor);
assertEquals(daniel.getName(),actor.getName());
assertEquals(1,actor.getRoles().size());
Role role = actor.getRoles().iterator().next();
assertEquals("Harry Potter", role.getRole());
}
}

View File

@@ -0,0 +1,44 @@
/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example.springdata.neo4j;
import org.neo4j.ogm.session.SessionFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.server.InProcessServer;
import org.springframework.data.neo4j.server.Neo4jServer;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author Luanne Misquitta
*/
@Configuration
@EnableTransactionManagement
@EnableNeo4jRepositories("example.springdata.neo4j.repo")
public class ExampleConfig extends Neo4jConfiguration{
@Override
public Neo4jServer neo4jServer() {
return new InProcessServer();
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("example.springdata.neo4j.domain");
}
}