Defining a Repository

The entity class that is used for persistence is discoverable by the Spring Data Framework either via annotation or inheritance. The NosqlRepository interface allows you to inherit and create an interface for each entity that will use the Oracle NoSQL Database for persistence.

The NosqlRepository interface extends Spring's PagingAndSortingRepository interface that provides many methods that define queries.

In addition to those methods that are provided by the NosqlRepository interface, you can add methods to your repository interface to define derived queries. These interface methods follow a specific naming pattern for Spring derived queries (for more information derived queries, see Query Creation) intercepted by the Spring Data Framework. The Spring Data Framework will use this naming pattern to generate an expression tree, passing this tree to the Oracle NoSQL Database SDK for Spring Data, where this expression tree is converted into an Oracle NoSQL Database query, which is compiled and then executed. These Oracle NoSQL Database queries are executed when you call the repository's respective methods.

If you wish to create your derived queries, this must be done by extending the NosqlRepository interface and adding your own Java method signatures that conform to the naming patterns as discussed in the derived queries section.

The following is an example of a code that implements the NosqlRepository interface. You must provide the bounded type parameters: the entity type and the data type of the ID field. This interface implements a derived query findByLastName and returns an iterable instance of the Student class.

import com.oracle.nosql.spring.data.repository.NosqlRepository;
 
/*The Student is the entity class, and Long is the data type of the 
  primary key in the Student class. This interface implements a derived query 
  findByLastName and returns an iterable instance of the Student class.*/
public interface StudentRepository extends NosqlRepository<Student, Long> {

    /*The Student is searched by lastname and 
      an iterable instance of the Student class is returned.*/
    Iterable<Student> findByLastName(String lastname);
}