Challenge Overview
Challenge Objectives
Extend the Spring Data plugin for the OrientDB to add query support
Project Background
OrientDB is the first Multi-Model Open Source NoSQL DBMS that combines the power of graphs and the flexibility of documents into one scalable, high-performance operational database.
Gone are the days where your database only supports a single data model. As a direct response to polyglot persistence, multi-model databases acknowledge the need for multiple data models, combining them to reduce operational complexity and maintain data consistency. Though graph databases have grown in popularity, most NoSQL products are still used to provide scalability to applications sitting on a relational DBMS. Advanced 2nd generation NoSQL products like OrientDB are the future: providing more functionality and flexibility, while being powerful enough to replace your operational DBMS.
There is an existing spring data plugin for OrientDB: https://github.com/orientechnologies/spring-data-orientdb, but it’s outdated and no longer working with latest OrientDB.
It’s intended to create a fresh Spring Data plugin based upon the latest OrientDB API rather than update this outdated plugin.
Technology Stack
- Spring Data 2.2.0
- OrientDB 3.0.23
- Java 1.8 (Oracle)
- Maven 3.6.2
Requirements
We have created the plugin to support the CRUD operations in the previous challenge: http://www.topcoder.com/challenges/301042631. Add support for the findByXXX method in repository like the neo4j.
Check the #9.4.3 Query Method in this link https://docs.spring.io/spring-data/neo4j/docs/5.2.0.RELEASE/reference/html/#neo4j-repo-intro
You need to support all the "Table 2" of the page above.
2. Support query methods with queries and commands specified through @Query and @Command annotations.
You can check this in neo4j as an example: https://docs.spring.io/spring-data/neo4j/docs/5.2.0.RELEASE/reference/html/#reference_programming_model_annotatedQueries
3. For the query method return values, you should support the following types:
- single Entity type <T> (Vertex, Edge or Element)
- Optional<T>
- List<T>
- Page<T>
- Iterable<T>
- Stream<T>
- DTO for the @Query annotated methods, and the DTO should be annotated with @QueryResult, check this for more details: https://docs.spring.io/spring-data/neo4j/docs/5.2.0.RELEASE/reference/html/#reference_programming-model_mapresult (mainly the data projection, so that only the properties in DTO are loaded and returned).
Note that you are responsible for fix any issues in existing code which prevents you from adding the query feature.
Please also make the @Edge and @Link annotation support an extra cascade attribute. If it's true, the child entity should be updated / deleted cascadely, and if it's false, the child entity should already exist. (Edges or links should be updated in both cases).
Final Submission Guidelines
Submission Deliverable
- Patch file
- Updated Unit tests
- Updated demo
- Updated README.md file with clear deployment guide and verification guide