InfoQ

InfoQ

Minibook

Good Relationships

Posted by Michael Hunger on Jan 30, 2012

Sections
Enterprise Architecture,
Development
Topics
Neo4j,
Spring Data,
Neo,
Spring,
SpringSource,
Java,
Dependency Injection,
Graph Database,
NoSQL,
VMWare,
Design Pattern,
Languages,
Database,
Enterprise,
Patterns,
Object Oriented Design,
Design,
Companies,
Programming

With Spring Data, the ever popular Spring Framework has cultivated a new patch of ground, bringing Big Data and NOSQL technology like Neo4j to enterprise developers. This guide introduces you to Spring Data Neo4j, using the fast, powerful and scalable graph database Neo4j to enjoy the benefits of having good relationships in your data.

Written by the project lead, Good Relationships provides all the practical details you need for developing enterprise applications with Spring Data Neo4j. The book starts with a narrative tutorial about implementing Cineasts.net, a full social web-app for movie enthusiasts. Then, a thorough reference part details core Neo4j concepts, querying, and the simple annotated POJO programming model of Spring Data Neo4j.

Free download

Download this book FREE

Table of Contents

Foreword by Rod Johnson
Foreword by Emil Eifrem
About this guide book
1. The Spring Data Neo4j Project
2. Feedback
3. Format of the Book
4. Acknowledgements

I. Tutorial

1. Introducing our project
2. The Spring stack

     2.1. Required setup
3. The domain model
4. Learning Neo4j
5. Spring Data Neo4j
6. Annotating the domain
7. Indexing
8. Repositories
9. Relationships

    9.1. Creating relationships
    9.2. Accessing related entities
    9.3. Accessing the relationship entities
10. Get it running
    10.1. Populating the database
    10.2. Inspecting the datastore
             10.2.1. Neoclipse visualization
             10.2.2. The Neo4j Shell
11. Web views
     11.1. Searching
     11.2. Listing results
12. Adding social
     12.1. Users
     12.2. Ratings for movies
13. Adding Security
14. More UI
15. Importing Data
16. Recommendations
17. Neo4j Server

     17.1. Getting Neo4j-Server
     17.2. Other approaches
18. Conclusion

II. Reference Documentation

Reference Documentation
     1. Spring Data and Spring Data Neo4j
     2. Reference Documentation Overview
19. Introduction to Neo4j

     19.1. What is a graph database?
     19.2. About Neo4j
     19.3. GraphDatabaseService
     19.4. Creating nodes and relationships
     19.5. Graph traversal
     19.6. Indexing
     19.7. Querying the Graph with Cypher
     19.8. Gremlin a Graph Traversal DSL
20. Programming model
     20.1. Object Graph Mapping
     20.2. Advanced Mapping with AspectJ
             20.2.1. AspectJ IDE support
     20.3. Simple Object Graph Mapping
     20.4. Defining node entities
             20.4.1. @NodeEntity: The basic building block
             20.4.2. @GraphId: Neo4j -id field
             20.4.3. @GraphProperty: Optional annotation for property fields
             20.4.4. @Indexed: Making entities searchable by field value
             20.4.5. @Query: fields as query result views
             20.4.6. @GraphTraversal: fields as traversal result views
     20.5. Relating node entities
             20.5.1. @RelatedTo: Connecting node entities
             20.5.2. @RelationshipEntity: Rich relationships
             20.5.3. @RelatedToVia: Accessing relationship entities
     20.6. Indexing
             20.6.1. Exact and numeric index
             20.6.2. Fulltext indexes
             20.6.3. Manual index access
             20.6.4. Index queries in Neo4jTemplate
             20.6.5. Neo4j Auto Indexes
             20.6.6. Spatial Indexes
     20.7. Neo4jTemplate
             20.7.1. Basic operations
             20.7.2. Result
             20.7.3. Indexing
             20.7.4. Graph traversal
             20.7.5. Cypher Queries
             20.7.6. Gremlin Scripts
             20.7.7. Transactions
             20.7.8. Neo4j REST Server
     20.8. CRUD with repositories
             20.8.1. CRUDRepository
             20.8.2. IndexRepository and NamedIndexRepository
             20.8.3. TraversalRepository
             20.8.4. Query and Finder Methods
             20.8.5. CypherDSL repository
             20.8.6. Creating repositories
             20.8.7. Composing repositories
     20.9. Projecting entities
     20.10. Geospatial Queries
     20.11. Active Record Methods for Advanced Mapping Mode
     20.12. Transactions
     20.13. Detached node entities in advanced mapping mode
             20.13.1. Relating detached entities
     20.14. Entity type representation
     20.15. Bean validation (JSR-303)
21. Environment setup
     21.1. Dependencies for Spring Data Neo4j Simple Mapping
     21.2. Gradle configuration for Advanced Mapping (AspectJ)
     21.3. Ant/Ivy configuration for Advanced Mapping (AspectJ)
     21.4. Maven configuration for Advanced Mapping
             21.4.1. Repositories 
             21.4.2. Dependencies
             21.4.3. Maven AspectJ build configuration
     21.5. Spring configuration 
             21.5.1. XML namespace
             21.5.2. Repository Configuration 
             21.5.3. Java-based bean configuration 
22. Cross-store persistence 
     22.1. Partial entities 
     22.2. Cross-store annotations 
             22.2.1. @NodeEntity(partial = "true") 
             22.2.2. @GraphProperty 
             22.2.3. Example 
     22.3. Configuring cross-store persistence 
23. Sample code 
     23.1. Introduction 
     23.2. Hello Worlds sample application 
     23.3. IMDB sample application 
     23.4. MyRestaurants sample application 
     23.5. MyRestaurant-Social sample application 
     23.6. Cineasts social movie database 
24. Heroku: Seeding the Cloud 
     24.1. Create a Self-Hosted Web Application 
     24.2. Deploy to Heroku 
25. Performance considerations 
     25.1. When to use Spring Data Neo4j 
26. AspectJ details 
27. Neo4j Server 

     27.1. Server Extension 
     27.2. Using Spring Data Neo4j as a REST client

About the Author

Michael Hunger has been passionate about soſtware development for a long time. He is particularly interested in the people who develop soſtware, soſtware craſtsmanship, programming languages, and improving code.

For the last two years he has been working with Neo Technology on the Neo4j graph database. As the project lead of Spring Data Neo4j he helped developing the idea to become a convenient and complete solution for object graph mapping. He is also taking care of Neo4j cloud hosting efforts.
Good relationships are everywhere in Michael’s life. His “real” life concerns his family and children, running his coffee shop and co-working-space "die-buchbar", living in the depths of a text-based multi-user dungeon, tinkering with and without Lego® and much more.

As a developer he loves to work with many aspects of programming languages, learning new things every day, participating in exciting and ambitious open source projects and contributing to different programming related books. Michael is also an active editor and interviewer at InfoQ.