{"id":20130447,"url":"https://github.com/ravendb/ravendb-jvm-client","last_synced_at":"2026-02-01T12:12:15.027Z","repository":{"id":545959,"uuid":"8926444","full_name":"ravendb/ravendb-jvm-client","owner":"ravendb","description":"RavenDB JVM Client","archived":false,"fork":false,"pushed_at":"2025-06-19T11:11:26.000Z","size":9402,"stargazers_count":13,"open_issues_count":1,"forks_count":15,"subscribers_count":10,"default_branch":"v6.0","last_synced_at":"2025-06-19T12:25:24.075Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ravendb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2013-03-21T10:31:56.000Z","updated_at":"2025-06-19T11:11:30.000Z","dependencies_parsed_at":"2024-01-19T16:31:12.949Z","dependency_job_id":"a6aec594-adf0-4af4-896b-d2ea77d68ded","html_url":"https://github.com/ravendb/ravendb-jvm-client","commit_stats":{"total_commits":683,"total_committers":8,"mean_commits":85.375,"dds":0.02196193265007318,"last_synced_commit":"375adbe48be75a939e32b8acbd2b50e501cc54a7"},"previous_names":["ravendb/jvm-client"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/ravendb/ravendb-jvm-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravendb%2Fravendb-jvm-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravendb%2Fravendb-jvm-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravendb%2Fravendb-jvm-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravendb%2Fravendb-jvm-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ravendb","download_url":"https://codeload.github.com/ravendb/ravendb-jvm-client/tar.gz/refs/heads/v6.0","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravendb%2Fravendb-jvm-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265677901,"owners_count":23810066,"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":[],"created_at":"2024-11-13T20:38:41.147Z","updated_at":"2026-02-01T12:12:09.992Z","avatar_url":"https://github.com/ravendb.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RavenDB Client for Java\n\n## Installation\n\n### Maven\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003enet.ravendb\u003c/groupId\u003e\n  \u003cartifactId\u003eravendb\u003c/artifactId\u003e\n  \u003cversion\u003e6.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\n### Gradle\n```\nimplementation 'net.ravendb:ravendb:6.0.0'\n```\n\n## Documentation\n\nPlease find the official documentation on [RavenDB Documentation](https://ravendb.net/docs/article-page/5.4/java) page.\n\n## Bug tracker\n\nYou can report bug/feature: [http://issues.hibernatingrhinos.com/issues/RDBC](http://issues.hibernatingrhinos.com/issues/RDBC)\n\n\n## Getting started\n\n1. Initialize document store (you should have one DocumentStore instance per application)\n```java\nDocumentStore store = new DocumentStore(\"http://live-test.ravendb.net\", \"databaseName\");\nstore.initialize();\n```\n2. Open a session\n```java\ntry (IDocumentSession session = store.openSession()) {\n    // here goes your code\n}\n```\n3. Call `saveChanges()` once you're done:\n```java\nUser user = session.load(User.class, \"users/1-A\");\nuser.setPassword(\"new password\");\nsession.saveChanges();\n// data is persisted \n// you can proceed e.g. finish web request\n```\n\n## CRUD example\n\n### Storing documents\n```java\nProduct product = new Product();\nproduct.setTitle(\"iPhone X\");\nproduct.setPrice(999.99);\nproduct.setCurrency(\"USD\");\nproduct.setStorage(64);\nproduct.setManufacturer(\"Apple\");\nproduct.setInStock(true);\n\nsession.store(product, \"products/\");\nSystem.out.println(product.getId()); // products/1-A\nsession.saveChanges();\n```\n\n### Loading documents\n```java\nProduct product = session.load(Product.class, \"products/1-A\");\nSystem.out.println(product.getTitle());   // iPhone X\nSystem.out.println(product.getId());      // Products/1-A\n```\n\n### Loading documents with includes\n```java\ntry (IDocumentSession session = store.openSession()) {\n    // users/1\n    // {\n    //      \"name\": \"John\",\n    //      \"kids\": [\"users/2\", \"users/3\"]\n    // }\n    User user1 = session.include(\"kids\")\n        .load(User.class, \"users/1\");\n    // Document users/1 is going to be pulled along\n    // with docs referenced in \"kids\" field within a single request\n\n    User user2 = session.load(User.class, \"users/2\"); // this won't call server again\n    assertThat(user1)\n        .isNotNull();\n    assertThat(user2)\n        .isNotNull();\n    assertThat(session.advanced().getNumberOfRequests())\n        .isEqualTo(1);\n}\n\n```\n### Updating documents\n```java\nProduct product = session.load(Product.class, \"products/1-A\");\nproduct.setInStock(false);\nproduct.setLastUpdate(new Date());\nsession.saveChanges();\n// ...\nproduct = session.load(Product.class, \"products/1-A\");\nSystem.out.println(product.getInStock());     // false\nSystem.out.println(product.getLastUpdate())   // 2018-06-05T13:52:31.633Z\n```\n\n### Deleting documents\n1. Using entity\n```java\nProduct product = session.load(Product.class, \"products/1-A\");\nsession.delete(product);\nsession.saveChanges();\n\nproduct = session.load(Product.class, \"products/1-A\");\nassertThat(product)\n    .isNull();\n```\n\n2. Using document ID\n```java\nsession.delete(\"products/1-A\");\n```\n\n## Querying documents\n1. Use `query()` session method:\n\nBy collection:\n```java\nIDocumentQuery\u003cProduct\u003e query = session.query(Product.class);\n```\n\nBy index name:\n```java\nIDocumentQuery\u003cProduct\u003e query = session.query(Product.class, Products_ByCategory.class);\n```\n\n2. Build up the query - apply conditions, set ordering etc. Query supports chaining calls:\n```java\nquery\n    .waitForNonStaleResults()\n    .usingDefaultOperator(QueryOperator.AND)\n    .whereEquals(\"manufacturer\", \"Apple\")\n    .whereEquals(\"inStock\", true)\n    .whereBetween(\"lastUpdate\", lastYearDate, new Date())\n    .orderBy(\"price\");\n```\n\n3. Finally, you may get query results:\n```java\nList\u003cProduct\u003e products = query.toList();\n// ...\nProduct firstOne = query.first(); // gets first result\n// ...\nProduct single = query.single();  // gets single result\n```\n\n### DocumentQuery methods overview\n\n#### selectFields() - projections using a single field\n```java\n\n// RQL\n// from users select name\nList\u003cString\u003e userNames = session.query(User.class)\n    .selectFields(String.class, \"name\")\n    .toList();\n// John,Stefanie,Thomas\n```\n\n#### selectFields() - projections using multiple fields\n```java\n// RQL\n// from users select name, age\nList\u003cNameAndAge\u003e result = session.query(User.class)\n    .selectFields(NameAndAge.class)\n    .toList();\n// [ { name: 'John', age: 30, id: 'users/1-A' },\n//   { name: 'Stefanie', age: 25, id: 'users/2-A' },\n//   { name: 'Thomas', age: 25, id: 'users/3-A' } ]\n```\n\n#### distinct()\n```java\n// RQL\n// from users select distinct age\nsession.query(User.class)\n    .selectFields(String.class, \"age\")\n    .distinct()\n    .toList(); // [ 25, 30 ]\n```\n\n#### whereEquals() / whereNotEquals()\n```java\n// RQL\n// from users where age = 30\nsession.query(User.class)\n    .whereEquals(\"age\", 30)\n    .toList() \n// [ User {\n//    name: 'John',\n//    age: 30,\n//    kids: [...],\n//    registeredAt: 2017-11-10T23:00:00.000Z } ]\n```\n\n#### whereIn()\n```java\n// RQL\n// from users where name in (\"John\", \"Thomas\")\nsession.query(User.class)\n    .whereIn(\"name\", Arrays.asList(\"John\", \"Thomas\"))\n    .toList()\n// [ User {\n//     name: 'John',\n//     age: 30,\n//     registeredAt: 2017-11-10T23:00:00.000Z,\n//     kids: [...],\n//     id: 'users/1-A' },\n//   User {\n//     name: 'Thomas',\n//     age: 25,\n//     registeredAt: 2016-04-24T22:00:00.000Z,\n//     id: 'users/3-A' } ]\n```\n\n#### whereStartsWith() / whereEndsWith()\n```java\n// RQL\n// from users where startsWith(name, 'J')\nsession.query(User.class)\n    .whereStartsWith(\"name\", \"J\")\n    .toList();\n// [ User {\n//    name: 'John',\n//    age: 30,\n//    kids: [...],\n//    registeredAt: 2017-11-10T23:00:00.000Z } ]\n```\n\n#### whereBetween()\n```java\n// RQL\n// from users where registeredAt between '2016-01-01' and '2017-01-01'\nsession.query(User.class)\n    .whereBetween(\"registeredAt\", lastYearStartDate, new Date())\n    .toList()\n// [ User {\n//     name: 'Thomas',\n//     age: 25,\n//     registeredAt: 2016-04-24T22:00:00.000Z,\n//     id: 'users/3-A' } ]\n```\n\n#### whereGreaterThan() / whereGreaterThanOrEqual() / whereLessThan() / whereLessThanOrEqual()\n```java\n// RQL\n// from users where age \u003e 29\nsession.query(User.class)\n    .whereGreaterThan(\"age\", 29)\n    .toList();\n// [ User {\n//   name: 'John',\n//   age: 30,\n//   registeredAt: 2017-11-10T23:00:00.000Z,\n//   kids: [...],\n//   id: 'users/1-A' } ]\n```\n\n#### whereExists()\nChecks if the field exists.\n```java\n// RQL\n// from users where exists(\"age\")\nsession.query(User.class)\n    .whereExists(\"kids\")\n    .toList();\n// [ User {\n//   name: 'John',\n//   age: 30,\n//   registeredAt: 2017-11-10T23:00:00.000Z,\n//   kids: [...],\n//   id: 'users/1-A' } ]\n```\n\n#### containsAny() / containsAll()\n```java\n// RQL\n// from users where kids in ('Mara')\nsession.query(User.class)\n    .containsAll(\"kids\", Arrays.asList(\"Mara\", \"Dmitri\"))\n    .toList();\n// [ User {\n//   name: 'John',\n//   age: 30,\n//   registeredAt: 2017-11-10T23:00:00.000Z,\n//   kids: [\"Dmitri\", \"Mara\"]\n//   id: 'users/1-A' } ]\n```\n\n#### search()\nPerforms full-text search.\n```java\n// RQL\n// from users where search(kids, 'Mara')\nsession.query(User.class)\n    .search(\"kids\", \"Mara Dmitri\")\n    .toList();\n// [ User {\n//   name: 'John',\n//   age: 30,\n//   registeredAt: 2017-11-10T23:00:00.000Z,\n//   kids: [\"Dmitri\", \"Mara\"]\n//   id: 'users/1-A' } ]\n```\n\n#### openSubclause() / closeSubclause()\n```java\n// RQL\n// from users where exists(kids) or (age = $p0 and name != $p1)\nsession.query(User.class)\n    .whereExists(\"kids\")\n    .orElse()\n    .openSubclause()\n        .whereEquals(\"age\", 25)\n        .whereNotEquals(\"name\", \"Thomas\")\n    .closeSubclause()\n    .toList(); \n// [ User {\n//     name: 'John',\n//     age: 30,\n//     registeredAt: 2017-11-10T23:00:00.000Z,\n//     kids: [\"Dmitri\", \"Mara\"]\n//     id: 'users/1-A' },\n//   User {\n//     name: 'Stefanie',\n//     age: 25,\n//     registeredAt: 2015-07-29T22:00:00.000Z,\n//     id: 'users/2-A' } ]\n```\n\n#### not()\n```java\n// RQL\n// from users where age != 25\nsession.query(User.class)\n    .not()\n    .whereEquals(\"age\", 25)\n    .toList();\n// [ User {\n//   name: 'John',\n//   age: 30,\n//   registeredAt: 2017-11-10T23:00:00.000Z,\n//   kids: [\"Dmitri\", \"Mara\"]\n//   id: 'users/1-A' } ]\n```\n\n#### andAlso() / orElse()\n```java\n// RQL\n// from users where age != 25\nsession.query(User.class)\n    .whereExists(\"kids\")\n    .orElse()\n    .whereLessThan(\"age\", 30)\n    .toList();\n//  [ User {\n//     name: 'John',\n//     age: 30,\n//     registeredAt: 2017-11-10T23:00:00.000Z,\n//     kids: [ 'Dmitri', 'Mara' ],\n//     id: 'users/1-A' },\n//   User {\n//     name: 'Thomas',\n//     age: 25,\n//     registeredAt: 2016-04-24T22:00:00.000Z,\n//     id: 'users/3-A' },\n//   User {\n//     name: 'Stefanie',\n//     age: 25,\n//     registeredAt: 2015-07-29T22:00:00.000Z,\n//     id: 'users/2-A' } ]\n```\n\n#### usingDefaultOperator()\nSets default operator (which will be used if no `andAlso()` / `orElse()` was called. Just after query instantiation, `OR` is used as default operator. Default operator can be changed only adding any conditions.\n\n#### orderBy() / randomOrdering()\n```java\n// RQL\n// from users order by age\nsession.query(User.class)\n    .orderBy(\"age\") // .randomOrdering()\n    .toList();\n// [ User {\n//     name: 'Stefanie',\n//     age: 25,\n//     registeredAt: 2015-07-29T22:00:00.000Z,\n//     id: 'users/2-A' },\n//   User {\n//     name: 'Thomas',\n//     age: 25,\n//     registeredAt: 2016-04-24T22:00:00.000Z,\n//     id: 'users/3-A' },\n//   User {\n//     name: 'John',\n//     age: 30,\n//     registeredAt: 2017-11-10T23:00:00.000Z,\n//     kids: [ 'Dmitri', 'Mara' ],\n//     id: 'users/1-A' } ]\n```\n#### take()\nLimits the number of result entries to `count`.\n```java\n// RQL\n// from users order by age\nsession.query(User.class)\n    .orderBy(\"age\")\n    .take(2)\n    .toList();\n// [ User {\n//     name: 'Stefanie',\n//     age: 25,\n//     registeredAt: 2015-07-29T22:00:00.000Z,\n//     id: 'users/2-A' },\n//   User {\n//     name: 'Thomas',\n//     age: 25,\n//     registeredAt: 2016-04-24T22:00:00.000Z,\n//     id: 'users/3-A' } ]\n```\n\n#### skip()\nSkips first `count` results.\n```javascript\n// RQL\n// from users order by age\nsession.query(User.class)\n    .orderBy(\"age\")\n    .take(1)\n    .skip(1)\n    .toList();\n// [ User {\n//     name: 'Thomas',\n//     age: 25,\n//     registeredAt: 2016-04-24T22:00:00.000Z,\n//     id: 'users/3-A' } ]\n```\n\n#### Getting query statistics\nTo obtain query statistics use `statistics()` method.\n```java\nReference\u003cQueryStatistics\u003e statsRef = new Reference\u003c\u003e();\nList\u003cUser\u003e users = session.query(User.class)\n    .whereGreaterThan(\"age\", 29)\n    .statistics(statsRef)\n    .toList();\n// QueryStatistics {\n//   isStale: false,\n//   durationInMs: 744,\n//   totalResults: 1,\n//   skippedResults: 0,\n//   timestamp: 2018-09-24T05:34:15.260Z,\n//   indexName: 'Auto/users/Byage',\n//   indexTimestamp: 2018-09-24T05:34:15.260Z,\n//   lastQueryTime: 2018-09-24T05:34:15.260Z,\n//   resultEtag: 8426908718162809000 }\n```\n\n#### toList() / first() / single() / count()\n`toList()` - returns all results\n\n`first()` - first result\n\n`single()` - first result, throws error if there's more entries\n\n`count()` - returns the count of the results (not affected by `take()`)\n\n### Attachments\n\n#### Store attachments\n```java\nUser doc = new User();\ndoc.setName(\"John\");\n\n// track entity\nsession.store(doc);\n\n// get read stream or buffer to store\nFileInputStream fileStream = new FileInputStream(\"../photo.png\")\n\n// store attachment using entity\nsession.advanced().attachments()\n    .store(doc, \"photo.png\", fileStream, \"image/png\");\n\n// OR using document ID\nsession.advanced().attachments()\n    .store(doc.getId(), \"photo.png\", fileStream, \"image/png\");\n\nsession.saveChanges();\n```\n\n#### Get attachments\n\n```java\ntry (CloseableAttachmentResult closeableAttachmentResult \n    = session.advanced().attachments().get(documentId, \"photo.png\")) {\n    // closeableAttachmentResult.getDetails() contains information about the attachemnt\n    //     { \n    //       name: 'photo.png',\n    //       documentId: 'users/1-A',\n    //       contentType: 'image/png',\n    //       hash: 'MvUEcrFHSVDts5ZQv2bQ3r9RwtynqnyJzIbNYzu1ZXk=',\n    //       changeVector: '\"A:3-K5TR36dafUC98AItzIa6ow\"',\n    //       size: 4579 \n    //     }\n    InputStream is = closeableAttachmentResult.getData();\n    // is contains attachment data\n}\n```\n\n#### Check if attachment exists\n\n```java\nsession.advanced().attachments().exists(doc.getId(), \"photo.png\");\n// true\n\nsession.advanced().attachments().exists(doc.getId(), \"not_there.avi\");\n// false\n```\n\n#### Get attachment names\n\n```java\n// use a loaded entity to determine attachments' names\nAttachmentName[] names = session.advanced().attachments().getNames(doc);\n// [ { name: 'photo.png',\n//     hash: 'MvUEcrFHSVDts5ZQv2bQ3r9RwtynqnyJzIbNYzu1ZXk=',\n//     contentType: 'image/png',\n//     size: 4579 } ]\n```\n\n### Bulk Insert\n\n```java\n// create bulk insert instance using DocumentStore instance\ntry (BulkInsertOperation bulkInsert = store.bulkInsert()) {\n\n    // insert your documents\n    for (String name: Arrays.asList(\"Anna\", \"Maria\", \"Miguel\", \"Emanuel\", \"Dayanara\", \"Aleida\")) {\n        User user = new User();\n        user.setName(name);\n        bulkInsert.store(user);\n    }\n\n    // auto flush by closing bulkInsert operation\n}\n// User { name: 'Anna', id: 'users/1-A' }\n// User { name: 'Maria', id: 'users/2-A' }\n// User { name: 'Miguel', id: 'users/3-A' }\n// User { name: 'Emanuel', id: 'users/4-A' }\n// User { name: 'Dayanara', id: 'users/5-A' }\n// User { name: 'Aleida', id: 'users/6-A' }\n```\n\n### Changes API\nListen for database changes e.g. document changes.\n\n```java\nCleanCloseable subscription = store\n    .changes()\n    .forAllDocuments()\n    .subscribe(Observers.create(change -\u003e {\n        System.out.println(change.getType() + \" on document \" + change.getId());\n    }));\n\n// close when you are done\nsubscription.close();\n```\n\n### Streaming\n\n#### Stream documents with ID prefix\n```java\n try (CloseableIterator\u003cStreamResult\u003cUser\u003e\u003e stream \n    = session.advanced().stream(User.class, \"users/\")) {\n    while (stream.hasNext()) {\n        StreamResult\u003cUser\u003e next = stream.next();\n        User document = next.getDocument();\n        // do something with document\n    }\n}\n```\n\n#### Stream query results\n```java\n// create a query\nIDocumentQuery\u003cUser\u003e query = session.query(User.class)\n    .whereGreaterThan(\"age\", 29);\n\nReference\u003cStreamQueryStatistics\u003e statsRef = new Reference\u003c\u003e();\n                \ntry (CloseableIterator\u003cStreamResult\u003cUser\u003e\u003e stream \n    = session.advanced().stream(query, statsRef)) {\n    while (stream.hasNext()) {\n        StreamResult\u003cUser\u003e item = stream.next();\n        User user = item.getDocument();\n    }\n}\n```\n\n### Revisions\nNOTE: Please make sure revisions are enabled before trying one of the below.\n\n```java\nUser user = new User();\nuser.setName(\"Marcin\");\nuser.setAge(30);\nuser.setPet(\"users/4\");\n\ntry (IDocumentSession session = store.openSession()) {\n    session.store(user, \"users/1\");\n    session.saveChanges();\n\n    // modify the document to create a new revision\n    user.setName(\"Roman\");\n    user.setAge(40);\n\n    session.saveChanges();\n}\n\n\n// get revisions\nList\u003cUser\u003e revisions = session.advanced()\n    .revisions()\n    .getFor(User.class, \"users/1\");\n// [ { name: 'Roman',\n//     age: 40,\n//     pet: 'users/4',\n//     '@metadata': [Object],\n//     id: 'users/1' },\n//   { name: 'Marcin',\n//     age: 30,\n//     pet: 'users/4',\n//     '@metadata': [Object],\n//     id: 'users/1' } ]\n```\n\n### Suggestions\n```java\n// users collection\n// [ User {\n//     name: 'John',\n//     age: 30,\n//     registeredAt: 2017-11-10T23:00:00.000Z,\n//     kids: [Array],\n//     id: 'users/1-A' },\n\n// and a static index like:\npublic static class UsersIndex extends AbstractIndexCreationTask {\n    public UsersIndex() {\n        map = \"from user in docs.users select new { user.name }\";\n        suggestion(\"name\");\n    }\n}\n\n// ...\ntry (IDocumentSession session = store.openSession()) {\n    Map\u003cString, SuggestionResult\u003e results = session.query(User.class, UsersIndex.class)\n        .suggestUsing(x -\u003e x.byField(\"name\", \"Jon\"))\n        .execute();\n}\n// { name: { name: 'name', suggestions: [ 'john' ] } }\n```\n\n### Advanced patching\n```java\nsession.advanced().increment(\"users/1\", \"age\", 1);\n// increments *age* field by 1\n\nsession.advanced().patch(\"users/1\", \"underAge\", false);\n// sets *underAge* field to *false*\n\nsession.saveChanges();\n```\n\n\n## Working with secured server\n\n```java\n// load certificate\nKeyStore clientStore = KeyStore.getInstance(\"PKCS12\");\nclientStore.load(new FileInputStream(\"c:\\\\ravendb\\\\client-cert.pfx\"), \"passwordToPfx\".toCharArray());\n\ntry (DocumentStore store = new DocumentStore())  {\n    store.setCertificate(clientStore);\n    store.setDatabase(\"Northwind\");\n    store.setUrls(new String[]{ \"https://my_secured_raven\" });\n\n    store.initialize();\n\n    // do your work here\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravendb%2Fravendb-jvm-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fravendb%2Fravendb-jvm-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravendb%2Fravendb-jvm-client/lists"}