{"id":23496413,"url":"https://github.com/eclipse-jnosql/jnosql","last_synced_at":"2026-01-11T16:57:01.761Z","repository":{"id":38417584,"uuid":"63372616","full_name":"eclipse-jnosql/jnosql","owner":"eclipse-jnosql","description":"Eclipse JNoSQL is a framework which has the goal to help Java developers to create Jakarta EE applications with NoSQL.","archived":false,"fork":false,"pushed_at":"2025-05-08T19:16:28.000Z","size":12875,"stargazers_count":238,"open_issues_count":7,"forks_count":73,"subscribers_count":33,"default_branch":"main","last_synced_at":"2025-05-14T05:12:35.581Z","etag":null,"topics":["database","flexible","graph-database","jnosql","nosql","nosql-databases"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eclipse-jnosql.png","metadata":{"files":{"readme":"README.adoc","changelog":"CHANGELOG.adoc","contributing":"CONTRIBUTING.adoc","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.adoc","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-07-14T21:58:40.000Z","updated_at":"2025-05-13T13:24:44.000Z","dependencies_parsed_at":"2023-10-01T07:25:36.007Z","dependency_job_id":"735b4940-cdb1-4532-a991-61dad56a4a9b","html_url":"https://github.com/eclipse-jnosql/jnosql","commit_stats":{"total_commits":4034,"total_committers":20,"mean_commits":201.7,"dds":0.1484878532473971,"last_synced_commit":"e90e1e64c6cd26e8c01aefa2c8ebe110aceecfa7"},"previous_names":["eclipse-jnosql/jnosql","eclipse/jnosql"],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipse-jnosql","download_url":"https://codeload.github.com/eclipse-jnosql/jnosql/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254501557,"owners_count":22081528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","flexible","graph-database","jnosql","nosql","nosql-databases"],"created_at":"2024-12-25T04:12:57.968Z","updated_at":"2026-01-11T16:57:01.754Z","avatar_url":"https://github.com/eclipse-jnosql.png","language":"Java","funding_links":[],"categories":["数据库开发"],"sub_categories":[],"readme":"= Eclipse JNoSQL\n:toc: auto\n\n== Introduction\n\nEclipse JNoSQL is a compatible implementation of the https://jakarta.ee/specifications/nosql/[Jakarta NoSQL] and https://jakarta.ee/specifications/data/[Jakarta Data] specifications, a Java framework that streamlines the integration of Java applications with NoSQL databases.\n\n== Goals\n\n* Increase productivity performing common NoSQL operations\n* Rich Object Mapping integrated with Contexts and Dependency Injection (CDI)\n* Java-based Query and Fluent-API\n* Persistence lifecycle events\n* Low-level mapping using Standard NoSQL APIs\n* Specific template API to each NoSQL category\n* Annotation-oriented using JPA-like naming when it makes sense\n* Extensible to explore the particular behavior of a NoSQL database\n* Explore the popularity of Apache TinkerPop in Graph API\n* Jakarta NoSQL and Data implementations\n\n== Why Eclipse JNoSQL?\n\nEclipse JNoSQL is a Java framework that unifies NoSQL access across different database types, including Key-Value, Column Family, Document, and Graph. Built on top of the Jakarta NoSQL and Jakarta Data specifications, it simplifies development through standard annotations, fluent APIs, and full compatibility with Jakarta EE and MicroProfile runtimes.\n\nUse Eclipse JNoSQL to:\n\n* Increase productivity with annotation-based object mapping\n* Write expressive queries using a fluent or method-name DSL\n* Reduce boilerplate through CDI-managed components and lifecycle events\n* Switch NoSQL vendors with minimal code changes\n* Align with modern practices like Domain-Driven Design (DDD)\n* Rely on a standards-based solution compatible with Jakarta EE and MicroProfile servers\n\n== One Mapping API to Multiples NoSQL Databases\n\nEclipse JNoSQL provides one API for each NoSQL database type. However, it incorporates the same annotations from the https://jakarta.ee/specifications/persistence/[Jakarta Persistence] specification and inherits from the Java Persistence Java Persistence API (JPA) to map Java objects. Therefore, with just these annotations that look like JPA, there is support for more than twenty NoSQL databases.\n\n[source,java]\n----\n@Entity\npublic class Car {\n\n    @Id\n    private Long id;\n    @Column\n    private String name;\n    @Column\n    private CarType type;\n //...\n}\n----\n\nThese annotations from the Mapping API will look familiar to the Jakarta Persistence/JPA developer:\n\n[cols=\"Annotation description\"]\n|===\n|Annotation|Description\n\n|`@jakarta.nosql.Entity`\n|Specifies that the class is an entity. This annotation is applied to the entity class.\n\n|`@jakarta.nosql.Id`\n|Specifies the primary key of an entity.\n\n|`@jakarta.nosql.Column`\n|Specify the mapped column for a persistent property or field.\n\n|`@jakarta.nosql.Embeddable`\n|Specifies a class whose instances are stored as an intrinsic part of an owning entity and share the entity's identity.\n\n|`@jakarta.nosql.Convert`\n|Specifies the conversion of a Basic field or property.\n\n|`@org.eclipse.jnosql.mapping.MappedSuperclass`\n|Designates a class whose mapping information is applied to the entities that inherit from it. A mapped superclass has no separate table defined for it.\n\n|`@jakarta.nosql.Inheritance`\n|Specifies the inheritance strategy to be used for an entity class hierarchy.\n\n|`@jakarta.nosql.DiscriminatorColumn`\n|Specifies the discriminator column for the mapping strategy.\n\n|`@jakarta.nosql.DiscriminatorValue`\n|Specifies the value of the discriminator column for entities of the given type.\n\n|===\n\nIMPORTANT: Although similar to JPA, Jakarta NoSQL defines persistable fields with either the ```@Id``` or ```@Column``` annotation.\n\nAfter mapping an entity, you can explore the advantage of using a ```Template``` interface, which can increase productivity on NoSQL operations.\n\n[source,java]\n----\n@Inject\nTemplate template;\n...\n\nCar ferrari = Car.id(1L)\n        .name(\"Ferrari\")\n        .type(CarType.SPORT);\n\ntemplate.insert(ferrari);\nOptional\u003cCar\u003e car = template.find(Car.class, 1L);\ntemplate.delete(Car.class, 1L);\n\nList\u003cCar\u003e cars = template.select(Car.class).where(\"name\").eq(\"Ferrari\").result();\ntemplate.delete(Car.class).execute();\n----\n\nThis template has specialization to take advantage of a particular NoSQL database type.\n\nA ``Repository`` interface is also provided for exploring the Domain-Driven Design (DDD) pattern for a higher abstraction.\n\n[source,java]\n----\npublic interface CarRepository extends PageableRepository\u003cCar, String\u003e {\n\n    Optional\u003cCar\u003e findByName(String name);\n\n}\n\n@Inject\nCarRepository repository;\n...\n\nCar ferrari = Car.id(1L)\n        .name(\"Ferrari\")\n        .type(CarType.SPORT);\n\nrepository.save(ferrari);\nOptional\u003cCar\u003e idResult = repository.findById(1L);\nOptional\u003cCar\u003e nameResult = repository.findByName(\"Ferrari\");\n----\n\n== Getting Started\n\nEclipse JNoSQL requires these minimum requirements:\n\n* Java 17 (or higher)\n* https://jakarta.ee/specifications/cdi/3.0/[Jakarta Contexts \u0026 Dependency Injection 3.0] (CDI)\n* https://jakarta.ee/specifications/jsonb/2.0/[Jakarta JSON Binding 2.0] (JSON-B)\n* https://jakarta.ee/specifications/jsonp/2.2/[Jakarta JSON Processing 2.0] (JSON-P)\n* https://microprofile.io/microprofile-config/[MicroProfile Config]\n\n=== NoSQL Database Types\n\nEclipse JNoSQL provides common annotations and interfaces. Thus, the same annotations and interfaces, ```Template``` and ```Repository```, will work on the four NoSQL database types.\n\nAs a reference implementation for Jakarta NoSQL, Eclipse JNosql provides particular behavior to the database type required by the specification, including the Graph database type, it means, Eclipse JNoSQL covers the four NoSQL database types:\n\n* Key-Value\n* Column Family\n* Document\n* Graph\n\n=== Key-Value\n\nJakarta NoSQL provides a Key-Value template to explore the specific behavior of this NoSQL type.\n\nEclipse JNoSQL offers a mapping implementation for Key-Value NoSQL types:\n\n[source,xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eclipse.jnosql.mapping\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-mapping-key-value\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\nFurthermore, check for a Key-Value databases. You can find some implementations in the https://github.com/eclipse/jnosql-databases[JNoSQL Databases].\n\n[source,java]\n----\n@Inject\nKeyValueTemplate template;\n...\n\nCar ferrari = Car.id(1L).name(\"ferrari\").city(\"Rome\").type(CarType.SPORT);\n\ntemplate.put(ferrari);\nOptional\u003cCar\u003e car = template.get(1L, Car.class);\ntemplate.delete(1L);\n----\n\nKey-Value is database agnostic. Thus, you can change the database in your application with no or minimal impact on source code.\n\nYou can define the database settings using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification, so you can add properties and overwrite it in the environment following the https://12factor.net/config[Twelve-Factor App].\n\n[source,properties]\n----\njnosql.keyvalue.database=\u003cDATABASE\u003e\njnosql.keyvalue.provider=\u003cCLASS-DRIVER\u003e\njnosql.provider.host=\u003cHOST\u003e\njnosql.provider.user=\u003cUSER\u003e\njnosql.provider.password=\u003cPASSWORD\u003e\n----\n\nTIP: The ```jnosql.keyvalue.provider``` property is necessary when you have more than one driver in the classpath. Otherwise, it will take the first one.\n\nThese configuration settings are the default behavior. Nevertheless, there is an option to programmatically configure these settings. Create a class that implements the ```Supplier\u003cBucketManager\u003e``` interface and then define it using the ```@Alternative``` and ```@Priority``` annotations.\n\n[source,java]\n----\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\n@ApplicationScoped\npublic class ManagerSupplier implements Supplier\u003cBucketManager\u003e {\n\n    @Produces\n    public BucketManager get() {\n        Settings settings = Settings.builder()\n                .put(\"credential\", \"value\")\n                .build();\n        KeyValueConfiguration configuration = new NoSQLKeyValueProvider();\n        BucketManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\nYou can work with several Key-Value database instances through the CDI qualifier. To identify each database instance, make a ```BucketManager``` visible for CDI by adding the ```@Produces``` and the ```@Database``` annotations in the method.\n\n[source,java]\n----\n@Inject\n@Database(value = DatabaseType.KEY_VALUE, provider = \"databaseA\")\nprivate KeyValueTemplate templateA;\n\n@Inject\n@Database(value = DatabaseType.KEY_VALUE, provider = \"databaseB\")\nprivate KeyValueTemplate templateB;\n\n// producers methods\n@Produces\n@Database(value = DatabaseType.KEY_VALUE, provider = \"databaseA\")\npublic BucketManager getManagerA() {\n    BucketManager manager = // instance;\n    return manager;\n}\n\n@Produces\n@Database(value = DatabaseType.KEY_VALUE, provider = \"databaseB\")\npublic BucketManager getManagerB() {\n    BucketManager manager = // instance;\n    return manager;\n}\n----\n\n\nThe KeyValue Database module provides a simple way to integrate the `KeyValueDatabase` annotation with CDI, allowing you to inject collections managed by the key-value database. This annotation works seamlessly with various collections, such as List, Set, Queue, and Map.\n\nTo inject collections managed by the key-value database, use the `@KeyValueDatabase` annotation in combination with CDI's `@Inject` annotation. Here's how you can use it:\n\n[source,java]\n----\nimport javax.inject.Inject;\n\n// Inject a List\u003cString\u003e instance from the \"names\" bucket in the key-value database.\n@Inject\n@KeyValueDatabase(\"names\")\nprivate List\u003cString\u003e names;\n\n// Inject a Set\u003cString\u003e instance from the \"fruits\" bucket in the key-value database.\n@Inject\n@KeyValueDatabase(\"fruits\")\nprivate Set\u003cString\u003e fruits;\n\n// Inject a Queue\u003cString\u003e instance from the \"orders\" bucket in the key-value database.\n@Inject\n@KeyValueDatabase(\"orders\")\nprivate Queue\u003cString\u003e orders;\n\n// Inject a Map\u003cString, String\u003e instance from the \"orders\" bucket in the key-value database.\n@Inject\n@KeyValueDatabase(\"orders\")\nprivate Map\u003cString, String\u003e map;\n----\n\n=== Column Family\n\nJakarta NoSQL provides a Column Family template to explore the specific behavior of this NoSQL type.\n\nEclipse JNoSQL offers a mapping implementation for Column NoSQL types:\n[source,xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eclipse.jnosql.mapping\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-mapping-column\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\nFurthermore, check for a Column Family databases. You can find some implementations in the https://github.com/eclipse/jnosql-databases[JNoSQL Databases].\n\n[source,java]\n----\n@Inject\nColumnTemplate template;\n...\n\nCar ferrari = Car.id(1L)\n        .name(\"ferrari\").city(\"Rome\")\n        .type(CarType.SPORT);\n\ntemplate.insert(ferrari);\nOptional\u003cCar\u003e car = template.find(Car.class, 1L);\n\ntemplate.delete(Car.class).where(\"id\").eq(1L).execute();\n\nOptional\u003cCar\u003e result = template.singleResult(\"FROM Car WHERE _id = 1\");\n----\n\nColumn Family is database agnostic. Thus, you can change the database in your application with no or minimal impact on source code.\n\nYou can define the database settings using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification, so you can add properties and overwrite it in the environment following the https://12factor.net/config[Twelve-Factor App].\n\n[source,properties]\n----\njnosql.column.database=\u003cDATABASE\u003e\njnosql.column.provider=\u003cCLASS-DRIVER\u003e\njnosql.provider.host=\u003cHOST\u003e\njnosql.provider.user=\u003cUSER\u003e\njnosql.provider.password=\u003cPASSWORD\u003e\n----\n\nTIP: The ```jnosql.column.provider``` property is necessary when you have more than one driver in the classpath. Otherwise, it will take the first one.\n\nThese configuration settings are the default behavior. Nevertheless, there is an option to programmatically configure these settings. Create a class that implements the ```Supplier\u003cColumnManager\u003e``` interface, then define it using the ```@Alternative``` and ```@Priority``` annotations.\n\n[source,java]\n----\n@Alternative\n@Priority(Interceptor.Priority.APPLICrATION)\n@ApplicationScoped\npublic class ManagerSupplier implements Supplier\u003cDatabaseManager\u003e {\n\n    @Produces\n    @Database(DatabaseType.COLUMN)\n    public DatabaseManager get() {\n        Settings settings = Settings.builder()\n                .put(\"credential\", \"value\")\n                .build();\n        DatabaseConfiguration configuration = new NoSQLColumnProvider();\n        DatabaseManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\nYou can work with several column database instances through CDI qualifier. To identify each database instance, make a ``ColumnManager`` visible for CDI by putting the ```@Produces``` and the ```@Database``` annotations in the method.\n\n[source,java]\n----\n@Inject\n@Database(value = DatabaseType.COLUMN, provider = \"databaseA\")\nprivate ColumnTemplate templateA;\n\n@Inject\n@Database(value = DatabaseType.COLUMN, provider = \"databaseB\")\nprivate ColumnTemplate templateB;\n\n// producers methods\n@Produces\n@Database(value = DatabaseType.COLUMN, provider = \"databaseA\")\npublic ColumnManager getManagerA() {\n    return manager;\n}\n\n@Produces\n@Database(value = DatabaseType.COLUMN, provider = \"databaseB\")\npublic ColumnManager getManagerB() {\n    return manager;\n}\n----\n\n=== Document\n\nJakarta NoSQL provides a Document template to explore the specific behavior of this NoSQL type.\n\nEclipse JNoSQL offers a mapping implementation for Document NoSQL types:\n\n[source,xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eclipse.jnosql.mapping\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-mapping-document\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\nFurthermore, check for a Document databases. You can find some implementations in the https://github.com/eclipse/jnosql-databases[JNoSQL Databases].\n\n[source,java]\n----\n@Inject\nDocumentTemplate template;\n...\n\nCar ferrari = Car.id(1L)\n        .name(\"ferrari\")\n        .city(\"Rome\")\n        .type(CarType.SPORT);\n\ntemplate.insert(ferrari);\nOptional\u003cCar\u003e car = template.find(Car.class, 1L);\n\ntemplate.delete(Car.class).where(\"id\").eq(1L).execute();\n\nOptional\u003cCar\u003e result = template.singleResult(\"FROM Car WHERE _id = 1\");\n----\n\nDocument is database agnostic. Thus, you can change the database in your application with no or minimal impact on source code.\n\nYou can define the database settings using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification, so you can add properties and overwrite it in the environment following the https://12factor.net/config[Twelve-Factor App].\n\n[source,properties]\n----\njnosql.document.database=\u003cDATABASE\u003e\njnosql.document.provider=\u003cCLASS-DRIVER\u003e\njnosql.provider.host=\u003cHOST\u003e\njnosql.provider.user=\u003cUSER\u003e\njnosql.provider.password=\u003cPASSWORD\u003e\n----\n\nTIP: The ```jnosql.document.provider``` property is necessary when you have more than one driver in the classpath. Otherwise, it will take the first one.\n\nThese configuration settings are the default behavior. Nevertheless, there is an option to programmatically configure these settings. Create a class that implements the ```Supplier\u003cDocumentManager\u003e```, then define it using the ```@Alternative``` and ```@Priority``` annotations.\n\n[source,java]\n----\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\n@ApplicationScoped\npublic class ManagerSupplier implements Supplier\u003cDatabaseManager\u003e {\n\n    @Produces\n    @Database(DatabaseType.DOCUMENT)\n    public DatabaseManager get() {\n        Settings settings = Settings.builder()\n                .put(\"credential\", \"value\")\n                .build();\n        DatabaseConfiguration configuration = new NoSQLDocumentProvider();\n        DatabaseManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\nYou can work with several document database instances through CDI qualifier. To identify each database instance, make a ```DocumentManager``` visible for CDI by putting the ```@Produces``` and the ```@Database``` annotations in the method.\n\n[source,java]\n----\n@Inject\n@Database(value = DatabaseType.DOCUMENT, provider = \"databaseA\")\nprivate DocumentTemplate templateA;\n\n@Inject\n@Database(value = DatabaseType.DOCUMENT, provider = \"databaseB\")\nprivate DocumentTemplate templateB;\n\n// producers methods\n@Produces\n@Database(value = DatabaseType.DOCUMENT, provider = \"databaseA\")\npublic DocumentManager getManagerA() {\n    return manager;\n}\n\n@Produces\n@Database(value = DatabaseType.DOCUMENT, provider = \"databaseB\")\npublic DocumentManager getManagerB() {\n    return manager;\n}\n----\n\n=== Graph\n\nEclipse JNoSQL provides a Graph API that simplifies working with graph databases such as Neo4j and Apache TinkerPop. This API enables seamless integration with graph databases while following the Jakarta NoSQL specifications.\n\nTo start using graph databases with Eclipse JNoSQL, add the required dependency:\n\n[source,xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eclipse.jnosql.mapping\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-mapping-graph\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n==== Using the Relationship on Graph (Edge)\n\nThe `EdgeBuilder` provides a fluent API to define edges between entities, including properties.\n\n[source,java]\n----\n\nprivate GraphTemplate template;\n\nPerson person = new Person();\nBook book = new Book();\n\nEdge\u003cPerson, Book\u003e edge = Edge.source(person)\n        .label(\"READS\")\n        .target(book)\n        .property(\"since\", 2019)\n        .property(\"format\", \"digital\")\n        .build();\n\ntemplate.edge(edge);\n----\n\n==== Configuring a Graph Database\n\nYou can configure your graph database using MicroProfile Config properties.\n\n[source,properties]\n----\njnosql.graph.database=\u003cDATABASE\u003e\njnosql.graph.provider=\u003cCLASS-DRIVER\u003e\n----\n\nYou can also configure the database programmatically by providing a `GraphDatabaseManager` implementation.\n\n[source,java]\n----\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\n@ApplicationScoped\npublic class GraphManagerSupplier implements Supplier\u003cGraphDatabaseManager\u003e {\n\n    @Produces\n    @Database(DatabaseType.GRAPH)\n    @Default\n    public GraphDatabaseManager get() {\n        Settings settings = Settings.builder()\n                .put(\"credential\", \"value\")\n                .build();\n        GraphConfiguration configuration = new NoSQLGraphProvider();\n        GraphDatabaseManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\nBy using the `@Database` annotation, multiple graph database instances can be configured for CDI injection.\n\n[source,java]\n----\n@Inject\n@Database(value = DatabaseType.GRAPH, provider = \"graphA\")\nprivate GraphTemplate graphA;\n\n@Inject\n@Database(value = DatabaseType.GRAPH, provider = \"graphB\")\nprivate GraphTemplate graphB;\n----\n\n=== Jakarta Data\n\nEclipse JNoSQL as a https://jakarta.ee/specifications/data/1.0/jakarta-data-1.0[Jakarta Data] exploring more the NoSQL capabilities, provides a mapping API that allows you to map Java objects to NoSQL databases.\n\n=== Jakarta NoSQL\n\nEclipse JNoSQL is a https://jakarta.ee/specifications/nosql/1.0/jakarta-nosql-1.0[Jakarta NoSQL] implementation that provides a standard way to access NoSQL databases in Java applications. It offers a set of annotations and APIs to interact with various NoSQL database types, including Key-Value, Column Family, Document, and Graph.\n\n=== More Information\n\nCheck the https://www.jnosql.org/spec/[reference documentation] and https://www.jnosql.org/javadoc/[JavaDocs] to learn more.\n\n== Code of Conduct\n\nThis project is governed by the Eclipse Foundation Code of Conduct. By participating, you are expected to uphold this code of conduct. Please report unacceptable behavior to mailto:codeofconduct@eclipse.org[codeofconduct@eclipse.org].\n\n== Getting Help\n\nHaving trouble with Eclipse JNoSQL? We’d love to help!\n\nPlease report any bugs, concerns or questions with Eclipse JNoSQL to https://github.com/eclipse/jnosql[https://github.com/eclipse/jnosql].\n\nIf your issue refers to the https://github.com/eclipse/jnosql-databases[JNoSQL databases project] or\nthe https://github.com/eclipse/jnosql-extensions[JNoSQL extensions project], please, open the issue in this repository following the instructions in the\ntemplates.\n\n== Building from Source\n\nYou don’t need to build from source to use the project, but should you be interested in doing so, you can build it using Maven and Java 21 or higher.\n\n[source, Bash]\n----\nmvn clean install\n----\n\n\n== Contributing\n\nWe are very happy you are interested in helping us and there are plenty ways you can do so.\n\n- https://github.com/eclipse/jnosql/issues[**Open an Issue:**]  Recommend improvements, changes and report bugs\n\n- **Open a Pull Request:** If you feel like you can even make changes to our source code and suggest them, just check out our link:CONTRIBUTING.adoc[contributing guide] to learn about the development process, how to suggest bugfixes and improvements.\n\nHere are the badges of this project:\n[%autowidth,cols=\"a,a,a,a\", frame=none, grid=none, role=stretch ]\n|===\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=sqale_rating[ link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent, window=_blank, target=_blank]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=code_smells[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=ncloc[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=coverage[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=sqale_index[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=alert_status[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=reliability_rating[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=duplicated_lines_density[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=vulnerabilities[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=bugs[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n| image::https://sonarcloud.io/api/project_badges/measure?project=org.eclipse.jnosql%3Ajakarta-nosql-parent\u0026metric=security_rating[window=_blank, link=https://sonarcloud.io/summary/new_code?id=org.eclipse.jnosql%3Ajakarta-nosql-parent]\n|===\n\n== Testing Guideline\n\nThis project's testing guideline will help you understand Jakarta Data's testing practices.\nPlease take a look link:TESTING-GUIDELINE.adoc[at the file].\n\n== Migration\n\nThis migration guide explains how to upgrade from Eclipse JNoSQL version 1.0.0-b6 to the latest version, considering two significant changes: upgrading to Jakarta EE 9 and reducing the scope of the Jakarta NoSQL specification to only run on the Mapping. The guide provides instructions on updating package names and annotations to migrate your Eclipse JNoSQL project successfully.\n\nlink:MIGRATION.adoc[Migration Guide]\n\n== Compatibility and Innovation Strategy\n\nEclipse JNoSQL balances stability and innovation through a dual-branch strategy, designed to meet the needs of developers working with different versions of Jakarta EE.\n\nThe `1.1.x` branch ensures ongoing compatibility with Jakarta EE 11, enabling developers to build reliable applications on a stable API foundation. This branch will continue to receive maintenance and bug fixes, aligning with Jakarta EE 11 specifications.\n\n- Explore the `1.1.x` branch here: https://github.com/eclipse-jnosql/jnosql/tree/1.1.x\n\nWe will continue maintaining the `1.1.x` branch until the final versions of Jakarta Data 1.1, Jakarta NoSQL 1.1, and Jakarta Query 1.0 are released. It ensures that developers, working with these evolving specifications, can utilize a compatible and stable codebase throughout the transition period.\n\nMeanwhile, the `main` branch is dedicated to innovation. It targets the upcoming JNoSQL 1.2.0 release series and may introduce breaking changes or experimental APIs. Initial versions will be published as `beta` to validate new features and gather community feedback before stabilizing the next major release.\n\nThis approach allows the community to:\n\n- Maintain production-grade compatibility with Jakarta EE 11 and current Jakarta specifications.\n- Experiment with next-generation features in a safe, isolated context.\n\nBy keeping these paths separate, Eclipse JNoSQL ensures a smoother transition for users and broader experimentation for contributors.\n\n== Learn More\n\nIf you want to know more about both the communication and mapping layer, there are two complementary files for it each specific topic:\n\n* link:MAPPING.adoc[Mapping API]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-jnosql%2Fjnosql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipse-jnosql%2Fjnosql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-jnosql%2Fjnosql/lists"}