From ea0fac4352ab827e6747495ccfaf5b27e1136439 Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 20:41:36 +0100
Subject: [PATCH 1/7] docs: enhance documentatino to selectCursor
Signed-off-by: Otavio Santana
---
.../semistructured/DatabaseManager.java | 25 +++++++++++--------
.../SemiStructuredTemplate.java | 23 +++++++++--------
2 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
index e1faf5b8b..28ee76980 100644
--- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
+++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
@@ -306,21 +306,24 @@ default Optional singleResult(SelectQuery query) {
/**
* Select entities using pagination with cursor-based paging.
*
- * This method retrieves entities based on cursor-based paging, where the cursor acts as a bookmark for the next page of results.
- * If the provided {@link PageRequest} has a mode of {@link jakarta.data.page.PageRequest.Mode#OFFSET}, the method will consider
- * the initial request as an offset-based pagination and extract the order key to create a new {@link PageRequest} with
- * {@link jakarta.data.page.PageRequest.Mode#CURSOR_NEXT}. If the initial request is already cursor-based, the method will proceed as instructed.
- *
- *
- * If the cursor-based pagination is used, at least one order key is required to be specified in the {@link SelectQuery} order
- * clause; otherwise, an {@link IllegalStateException} will be thrown.
- *
+ * This method retrieves entities based on cursor-based paging, where the cursor acts as a bookmark for the next or previous page of results.
+ * The method strictly supports cursor-based pagination and does not handle offset-based pagination. If the provided {@link PageRequest} is
+ * in {@link jakarta.data.page.PageRequest.Mode#OFFSET}, this method should not be used; instead, use {@link #selectOffSet} for offset-based
+ * pagination.
+ *
+ * The {@link SelectQuery} parameter will be overwritten based on the {@link PageRequest}, specifically using the cursor information to
+ * adjust the query condition accordingly. This method ignores the skip value in {@link PageRequest} since skip is not applicable in cursor-based
+ * pagination.
+ *
+ * For cursor-based pagination, at least one sort field must be specified in the {@link SelectQuery} order clause; otherwise, an
+ * {@link IllegalArgumentException} will be thrown.
*
* @param query the query to retrieve entities
* @param pageRequest the page request defining the cursor-based paging
* @return a {@link CursoredPage} instance containing the entities within the specified page
* @throws NullPointerException if the query or pageRequest is null
- * @throws IllegalStateException if the cursor-based pagination is used without any order key specified
+ * @throws IllegalArgumentException if cursor-based pagination is used without any sort field specified or if the cursor size does not match
+ * the sort size
*/
default CursoredPage selectCursor(SelectQuery query, PageRequest pageRequest){
Objects.requireNonNull(query, "query is required");
@@ -347,4 +350,4 @@ default CursoredPage selectCursor(SelectQuery query, PageRe
* Closes the database manager and releases any associated resources.
*/
void close();
-}
\ No newline at end of file
+}
diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java
index 571e8c8af..ad7d7b9a2 100644
--- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java
+++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java
@@ -204,22 +204,25 @@ public interface SemiStructuredTemplate extends Template {
/**
* Select entities using pagination with cursor-based paging.
*
- * This method retrieves entities based on cursor-based paging, where the cursor acts as a bookmark for the next page of results.
- * If the provided {@link PageRequest} has a mode of {@link jakarta.data.page.PageRequest.Mode#OFFSET}, the method will consider
- * the initial request as an offset-based pagination and extract the order key to create a new {@link PageRequest} with
- * {@link jakarta.data.page.PageRequest.Mode#CURSOR_NEXT}. If the initial request is already cursor-based, the method will proceed as instructed.
- *
- *
- * If the cursor-based pagination is used, at least one order key is required to be specified in the {@link SelectQuery} order
- * clause; otherwise, an {@link IllegalStateException} will be thrown.
- *
+ * This method retrieves entities based on cursor-based paging, where the cursor acts as a bookmark for the next or previous page of results.
+ * The method strictly supports cursor-based pagination and does not handle offset-based pagination. If the provided {@link PageRequest} is
+ * in {@link jakarta.data.page.PageRequest.Mode#OFFSET}, this method should not be used; instead, use {@link #selectOffSet} for offset-based
+ * pagination.
+ *
+ * The {@link SelectQuery} parameter will be overwritten based on the {@link PageRequest}, specifically using the cursor information to
+ * adjust the query condition accordingly. This method ignores the skip value in {@link PageRequest} since skip is not applicable in cursor-based
+ * pagination.
+ *
+ * For cursor-based pagination, at least one sort field must be specified in the {@link SelectQuery} order clause; otherwise, an
+ * {@link IllegalArgumentException} will be thrown.
*
* @param query the query to retrieve entities
* @param pageRequest the page request defining the cursor-based paging
* @param the entity type
* @return a {@link CursoredPage} instance containing the entities within the specified page
* @throws NullPointerException if the query or pageRequest is null
- * @throws IllegalStateException if the cursor-based pagination is used without any order key specified
+ * @throws IllegalArgumentException if cursor-based pagination is used without any sort field specified or if the cursor size does not match
+ * the sort size
*/
CursoredPage selectCursor(SelectQuery query, PageRequest pageRequest);
}
From 28ac94c0bd9815957c6d60ad949259fc7371bece Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 20:44:59 +0100
Subject: [PATCH 2/7] docs: update documentation to Databasemanager
Signed-off-by: Otavio Santana
---
.../jnosql/communication/semistructured/DatabaseManager.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
index 28ee76980..b94f0aea8 100644
--- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
+++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
@@ -13,6 +13,7 @@
import jakarta.data.exceptions.NonUniqueResultException;
import jakarta.data.page.CursoredPage;
+import jakarta.data.page.Page;
import jakarta.data.page.PageRequest;
import java.time.Duration;
@@ -308,8 +309,7 @@ default Optional singleResult(SelectQuery query) {
*
* This method retrieves entities based on cursor-based paging, where the cursor acts as a bookmark for the next or previous page of results.
* The method strictly supports cursor-based pagination and does not handle offset-based pagination. If the provided {@link PageRequest} is
- * in {@link jakarta.data.page.PageRequest.Mode#OFFSET}, this method should not be used; instead, use {@link #selectOffSet} for offset-based
- * pagination.
+ * in {@link jakarta.data.page.PageRequest.Mode#OFFSET}, this method should not be used.
*
* The {@link SelectQuery} parameter will be overwritten based on the {@link PageRequest}, specifically using the cursor information to
* adjust the query condition accordingly. This method ignores the skip value in {@link PageRequest} since skip is not applicable in cursor-based
From 60b9c2591e568eb3677fb6542dd727037e14b7d1 Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 20:46:26 +0100
Subject: [PATCH 3/7] docs: create documentation to selectOffSet
Signed-off-by: Otavio Santana
---
.../SemiStructuredTemplate.java | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java
index ad7d7b9a2..66eafa98a 100644
--- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java
+++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/SemiStructuredTemplate.java
@@ -11,6 +11,7 @@
package org.eclipse.jnosql.mapping.semistructured;
import jakarta.data.page.CursoredPage;
+import jakarta.data.page.Page;
import jakarta.data.page.PageRequest;
import org.eclipse.jnosql.mapping.PreparedStatement;
import jakarta.nosql.Template;
@@ -225,4 +226,26 @@ public interface SemiStructuredTemplate extends Template {
* the sort size
*/
CursoredPage selectCursor(SelectQuery query, PageRequest pageRequest);
+
+ /**
+ * Select entities using pagination with offset-based paging.
+ *
+ * This method retrieves entities using traditional offset-based pagination. The results are determined by the offset and limit values
+ * specified in the provided {@link PageRequest}. This method is suitable when you want to paginate through a result set using an explicit
+ * starting point (offset) and a defined page size.
+ *
+ * The {@link SelectQuery} may be modified based on the provided {@link PageRequest}, specifically using the offset and limit to adjust
+ * the query accordingly. Unlike cursor-based pagination, the offset value in {@link PageRequest} is utilized to skip the specified number
+ * of rows before retrieving the next set of results.
+ *
+ * It is important to note that offset-based pagination may have performance implications on large datasets because it requires the database
+ * to scan and count a potentially large number of rows before returning the requested page.
+ *
+ * @param query the query to retrieve entities
+ * @param pageRequest the page request defining the offset-based paging, including the offset and page size
+ * @param the entity type
+ * @return a {@link Page} instance containing the entities within the specified page, along with paging information
+ * @throws NullPointerException if the query or pageRequest is null
+ */
+ Page selectOffSet(SelectQuery query, PageRequest pageRequest);
}
From 253c795b279d40e1c02ccc9c4ace6c63cbb525a0 Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 20:51:52 +0100
Subject: [PATCH 4/7] feat: create implementation to offset with pagination
Signed-off-by: Otavio Santana
---
.../AbstractSemiStructuredTemplate.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java
index 3a67318d1..872949bbe 100644
--- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java
+++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java
@@ -17,6 +17,7 @@
import jakarta.data.exceptions.NonUniqueResultException;
import jakarta.data.page.CursoredPage;
+import jakarta.data.page.Page;
import jakarta.data.page.PageRequest;
import jakarta.data.page.impl.CursoredPageRecord;
import jakarta.nosql.QueryMapper;
@@ -28,6 +29,7 @@
import org.eclipse.jnosql.communication.semistructured.SelectQuery;
import org.eclipse.jnosql.mapping.core.Converters;
import org.eclipse.jnosql.mapping.IdNotFoundException;
+import org.eclipse.jnosql.mapping.core.NoSQLPage;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
import org.eclipse.jnosql.mapping.metadata.EntityMetadata;
import org.eclipse.jnosql.mapping.metadata.FieldMetadata;
@@ -333,6 +335,16 @@ public CursoredPage selectCursor(SelectQuery query, PageRequest pageReque
return new CursoredPageRecord<>(entities, cursors, -1, pageRequest, nextPageRequest, beforePageRequest);
}
+ @Override
+ public Page selectOffSet(SelectQuery query, PageRequest pageRequest) {
+ Objects.requireNonNull(query, "query is required");
+ Objects.requireNonNull(pageRequest, "pageRequest is required");
+ var queryPage = new MappingQuery(query.sorts(), pageRequest.size(), NoSQLPage.skip(pageRequest),
+ query.condition().orElse(null), query.name());
+ Stream result = select(queryPage);
+ return NoSQLPage.of(result.toList(), pageRequest);
+ }
+
protected T persist(T entity, UnaryOperator persistAction) {
return Stream.of(entity)
.map(toUnary(eventManager()::firePreEntity))
From f03caccc7fc54b8bf7975aa44172ffc4d76e4980 Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 20:57:44 +0100
Subject: [PATCH 5/7] test: create test to offset
Signed-off-by: Otavio Santana
---
.../DefaultSemiStructuredTemplateTest.java | 71 +++++++++++++------
1 file changed, 48 insertions(+), 23 deletions(-)
diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/test/java/org/eclipse/jnosql/mapping/semistructured/DefaultSemiStructuredTemplateTest.java b/jnosql-mapping/jnosql-mapping-semistructured/src/test/java/org/eclipse/jnosql/mapping/semistructured/DefaultSemiStructuredTemplateTest.java
index cbed5fff6..fc9907d8b 100644
--- a/jnosql-mapping/jnosql-mapping-semistructured/src/test/java/org/eclipse/jnosql/mapping/semistructured/DefaultSemiStructuredTemplateTest.java
+++ b/jnosql-mapping/jnosql-mapping-semistructured/src/test/java/org/eclipse/jnosql/mapping/semistructured/DefaultSemiStructuredTemplateTest.java
@@ -16,6 +16,7 @@
import jakarta.data.exceptions.NonUniqueResultException;
import jakarta.data.page.CursoredPage;
+import jakarta.data.page.Page;
import jakarta.data.page.PageRequest;
import jakarta.data.page.impl.CursoredPageRecord;
import jakarta.enterprise.inject.Instance;
@@ -30,6 +31,7 @@
import org.eclipse.jnosql.communication.semistructured.SelectQuery;
import org.eclipse.jnosql.mapping.core.Converters;
import org.eclipse.jnosql.mapping.IdNotFoundException;
+import org.eclipse.jnosql.mapping.core.NoSQLPage;
import org.eclipse.jnosql.mapping.semistructured.entities.Job;
import org.eclipse.jnosql.mapping.semistructured.entities.Person;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
@@ -115,7 +117,7 @@ void shouldInsert() {
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .insert(any(CommunicationEntity.class)))
+ .insert(any(CommunicationEntity.class)))
.thenReturn(communicationEntity);
template.insert(this.person);
@@ -134,7 +136,7 @@ void shouldMergeOnInsert() {
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .insert(any(CommunicationEntity.class)))
+ .insert(any(CommunicationEntity.class)))
.thenReturn(communicationEntity);
Person person = Person.builder().build();
@@ -143,21 +145,19 @@ void shouldMergeOnInsert() {
verify(eventPersistManager).firePostEntity(any(Person.class));
verify(eventPersistManager).firePreEntity(any(Person.class));
assertSame(person, result);
- assertEquals(10, person.getAge());
+ assertEquals(10, person.getAge());
}
-
-
@Test
void shouldInsertTTL() {
var communicationEntity = CommunicationEntity.of("Person");
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .insert(any(CommunicationEntity.class),
- any(Duration.class)))
+ .insert(any(CommunicationEntity.class),
+ any(Duration.class)))
.thenReturn(communicationEntity);
template.insert(this.person, Duration.ofHours(2));
@@ -175,7 +175,7 @@ void shouldUpdate() {
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .update(any(CommunicationEntity.class)))
+ .update(any(CommunicationEntity.class)))
.thenReturn(communicationEntity);
template.update(this.person);
@@ -193,7 +193,7 @@ void shouldMergeOnUpdate() {
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .update(any(CommunicationEntity.class)))
+ .update(any(CommunicationEntity.class)))
.thenReturn(communicationEntity);
Person person = Person.builder().build();
@@ -213,7 +213,7 @@ void shouldInsertEntitiesTTL() {
Duration duration = Duration.ofHours(2);
Mockito.when(managerMock
- .insert(any(CommunicationEntity.class), Mockito.eq(duration)))
+ .insert(any(CommunicationEntity.class), Mockito.eq(duration)))
.thenReturn(communicationEntity);
template.insert(Arrays.asList(person, person), duration);
@@ -226,7 +226,7 @@ void shouldInsertEntities() {
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .insert(any(CommunicationEntity.class)))
+ .insert(any(CommunicationEntity.class)))
.thenReturn(communicationEntity);
template.insert(Arrays.asList(person, person));
@@ -239,7 +239,7 @@ void shouldUpdateEntities() {
communicationEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .update(any(CommunicationEntity.class)))
+ .update(any(CommunicationEntity.class)))
.thenReturn(communicationEntity);
template.update(Arrays.asList(person, person));
@@ -281,7 +281,7 @@ void shouldReturnSingleResult() {
columnEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .select(any(SelectQuery.class)))
+ .select(any(SelectQuery.class)))
.thenReturn(Stream.of(columnEntity));
SelectQuery query = select().from("person").build();
@@ -293,7 +293,7 @@ void shouldReturnSingleResult() {
@Test
void shouldReturnSingleResultIsEmpty() {
Mockito.when(managerMock
- .select(any(SelectQuery.class)))
+ .select(any(SelectQuery.class)))
.thenReturn(Stream.empty());
SelectQuery query = select().from("person").build();
@@ -332,7 +332,7 @@ void shouldReturnErrorWhenThereMoreThanASingleResult() {
columnEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
Mockito.when(managerMock
- .select(any(SelectQuery.class)))
+ .select(any(SelectQuery.class)))
.thenReturn(Stream.of(columnEntity, columnEntity));
SelectQuery query = select().from("person").build();
@@ -430,8 +430,8 @@ void shouldConvertEntityNameClassName() {
}
@Test
- void shouldConvertConvertFromAnnotationEntity(){
- template.query("FROM Vendor" );
+ void shouldConvertConvertFromAnnotationEntity() {
+ template.query("FROM Vendor");
ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(SelectQuery.class);
verify(managerMock).select(queryCaptor.capture());
SelectQuery query = queryCaptor.getValue();
@@ -472,26 +472,26 @@ void shouldCountFromEntityClass() {
var captor = ArgumentCaptor.forClass(SelectQuery.class);
verify(managerMock).count(captor.capture());
var query = captor.getValue();
- SoftAssertions.assertSoftly(soft ->{
+ SoftAssertions.assertSoftly(soft -> {
soft.assertThat(query.condition()).isEmpty();
});
}
@Test
- void shouldFindAll(){
+ void shouldFindAll() {
template.findAll(Person.class);
verify(managerMock).select(select().from("Person").build());
}
@Test
- void shouldDeleteAll(){
+ void shouldDeleteAll() {
template.deleteAll(Person.class);
verify(managerMock).delete(delete().from("Person").build());
}
@Test
- void shouldSelectCursor(){
+ void shouldSelectCursor() {
PageRequest request = PageRequest.ofSize(2);
PageRequest afterKey = PageRequest.afterCursor(PageRequest.Cursor.forKey("Ada"), 1, 2, false);
@@ -504,7 +504,7 @@ void shouldSelectCursor(){
PageRequest personRequest = PageRequest.ofSize(2);
CursoredPage result = template.selectCursor(query, personRequest);
- SoftAssertions.assertSoftly(soft ->{
+ SoftAssertions.assertSoftly(soft -> {
soft.assertThat(result).isNotNull();
soft.assertThat(result.content()).hasSize(1);
soft.assertThat(result.hasNext()).isTrue();
@@ -517,8 +517,33 @@ void shouldSelectCursor(){
}
+ @Test
+ void shouldSelectOffSet() {
+ PageRequest request = PageRequest.ofPage(2).size(10);
+
+ SelectQuery query = select().from("Person").orderBy("name").asc().build();
+
+ Mockito.when(managerMock.select(Mockito.any())).thenReturn(Stream.empty());
+
+ Page result = template.selectOffSet(query, request);
+ var captor = ArgumentCaptor.forClass(SelectQuery.class);
+ Mockito.verify(managerMock).select(captor.capture());
+ SelectQuery value = captor.getValue();
+ SoftAssertions.assertSoftly(soft -> {
+ soft.assertThat(result).isNotNull();
+ soft.assertThat(result.content()).isEmpty();
+ soft.assertThat(result.hasNext()).isFalse();
+ soft.assertThat(value.columns()).isEmpty();
+ soft.assertThat(value.name()).isEqualTo("Person");
+ soft.assertThat(value.sorts()).isNotEmpty();
+ soft.assertThat(value.skip()).isEqualTo(10);
+ soft.assertThat(value.limit()).isEqualTo(10);
+
+ });
+ }
+
- private List content(){
+ private List content() {
CommunicationEntity columnEntity = CommunicationEntity.of("Person");
columnEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
return List.of(columnEntity);
From bf613e72b26032b0eeca0b687b438af2896fe992 Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 20:59:37 +0100
Subject: [PATCH 6/7] docs: enhance changelog
Signed-off-by: Otavio Santana
---
CHANGELOG.adoc | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index c17078fb7..bc4af6504 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -17,6 +17,8 @@ and this project adheres to https://semver.org/spec/v2.0.0.html[Semantic Version
- Include pagination with Query annotation
- Add support to array in the fields
- Add support to array in the fields of java record classes
+- Include `selectOffSet` to pagination queryies at the `SemiStructuredTemplate`
+
=== Fixed
@@ -26,6 +28,7 @@ and this project adheres to https://semver.org/spec/v2.0.0.html[Semantic Version
- Make sure at the serialization to the field, the API does not return any communication layer, but standard Java types
- Fix the like query at the JDQL
- Fix recursion calling to avoid stack overflow on the custom repository's query methods with @Query annotation with predefined queries
+- Fix documentation at `SemiStructuredTemplate` explaining how the cursor works.
=== Removed
From 9a30556fa0d05513e1b695af362518a6b6206914 Mon Sep 17 00:00:00 2001
From: Otavio Santana
Date: Mon, 2 Sep 2024 21:04:27 +0100
Subject: [PATCH 7/7] style: remove DatabaseManager
Signed-off-by: Otavio Santana
---
.../jnosql/communication/semistructured/DatabaseManager.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
index b94f0aea8..2630aa7e0 100644
--- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
+++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java
@@ -13,7 +13,6 @@
import jakarta.data.exceptions.NonUniqueResultException;
import jakarta.data.page.CursoredPage;
-import jakarta.data.page.Page;
import jakarta.data.page.PageRequest;
import java.time.Duration;