Jakarta NoSQL has one API for each NoSQL database type. However, it uses the same annotations to map Java objects. Therefore, with just these annotations that look like JPA, there is support for more than twenty NoSQL databases.
@Entity
public class Car {
@Id
private Long id;
@Column
private String name;
@Column
private CarType type;
//...
}
The Mapper annotations are pretty familiar if you are a JPA developer:
-
Entity
-
Id
-
Column
-
Embeddable
-
Convert
-
DiscriminatorColumn
-
DiscriminatorValue
-
Inheritance
-
MappedSuperclass
Important
|
Although similar to JPA, Jakarta NoSQL defines persistable fields with either ID or Column annotation. |
After mapping an entity, you can explore the advantage of a Template, which is a helper to increase productivity on NoSQL operations.
@Inject
Template template;
...
Car ferrari = Car.id(1L).name("Ferrari").type(CarType.SPORT);
template.insert(ferrari);
Optional<Car> car = template.find(Car.class, 1L);
template.delete(Car.class, 1L);
This template has specialization to take the benefits of a particular NoSQL database type.
There is
exploring the DDD pattern to have a higher abstraction.Repository
public interface CarRepository extends Repository<Car, String> {
Optional<Car> findByName(String name);
}
@Inject
CarRepository repository;
...
Car ferrari = Car.id(1L).name("Ferrari").type(CarType.SPORT);
repository.save(ferrari);
Optional<Car> idResult = repository.findById(1L);
Optional<Car> nameResult = repository.findByName("Ferrari");
Jakarta NoSQL has a key-value template to explore the specific behavior of this NoSQL type.
@Inject
KeyValueTemplate template;
...
Car ferrari = Car.id(1L).name("ferrari").city("Rome").type(CarType.SPORT);
template.put(ferrari);
Optional<Car> car = template.get(1L, Car.class);
template.delete(1L);
It is a key-value agnostic database; thus, you can change the database without or less code impact possible.
Jakarta NoSQL has a column template to explore the specific behavior of this NoSQL type.
@Inject
ColumnTemplate template;
...
Car ferrari = Car.id(1L).name("ferrari").city("Rome").type(CarType.SPORT);
template.insert(ferrari);
Optional<Car> car = template.find(Car.class, 1L);
ColumnDeleteQuery deleteQuery = delete().from("Car")
.where("_id").eq(1L).build();
template.delete(deleteQuery);
ColumnDeleteQuery query = select().from("Car")
.where("_id").eq(1L).build();
Optional<Car> result = template.singleResult("select * from Car where _id = 1");
It is a wide-column agnostic database; thus, you can change the database without or less code impact possible.
Jakarta NoSQL has a document template to explore the specific behavior of this NoSQL type.
@Inject
DocumentTemplate template;
...
Car ferrari = Car.id(1L).name("ferrari").city("Rome").type(CarType.SPORT);
template.insert(ferrari);
Optional<Car> car = template.find(Car.class, 1L);
DocumentDeleteQuery deleteQuery = delete().from("Car")
.where("_id").eq(1L).build();
template.delete(deleteQuery);
DocumentDeleteQuery query = select().from("Car")
.where("_id").eq(1L).build();
Optional<Car> result = template.singleResult("select * from Car where _id = 1");
It is a document agnostic database; thus, you can change the database without or less code impact possible.
Check the reference documentation, and Javadocs to know more.
This project is governed by the Eclipse Foundation of Conduct. By participating, you are expected to uphold this code of conduct. Please report unacceptable behavior to [email protected].
Having trouble with Jakarta NoSQL? We’d love to help!
Report bugs with Jakarta NoSQL at https://github.com/eclipse-ee4j/nosql.
You don’t need to build from source to use the project, but if you want to try, you can make it using Maven and Java 11 or higher.
mvn clean install
Any Jakarta NoSQL module must pass this test suite.
The TCK uses JUnit Jupiter 5
.
Check it more to know more
Any Jakarta NoSQL module must pass this test suite.
The TCK uses JUnit Jupiter 5
.
Check it more to know more