diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/AbstractTemplateSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/AbstractTemplateSupport.java index 64371dade..5476ac2bb 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/AbstractTemplateSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/AbstractTemplateSupport.java @@ -67,7 +67,7 @@ public AbstractTemplateSupport(ReactiveCouchbaseTemplate template, CouchbaseConv abstract ReactiveCouchbaseTemplate getReactiveTemplate(); - public T decodeEntityBase(String id, String source, Long cas, Class entityClass, String scope, + public T decodeEntityBase(Object id, String source, Long cas, Class entityClass, String scope, String collection, Object txResultHolder, CouchbaseResourceHolder holder) { // this is the entity class defined for the repository. It may not be the class of the document that was read @@ -127,7 +127,7 @@ public T decodeEntityBase(String id, String source, Long cas, Class entit if (cas != null && cas != 0 && persistentEntity.getVersionProperty() != null) { accessor.setProperty(persistentEntity.getVersionProperty(), cas); } - N1qlJoinResolver.handleProperties(persistentEntity, accessor, getReactiveTemplate(), id, scope, collection); + N1qlJoinResolver.handleProperties(persistentEntity, accessor, getReactiveTemplate(), id.toString(), scope, collection); if (holder != null) { holder.transactionResultHolder(txResultHolder, (T) accessor.getBean()); diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplateSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplateSupport.java index bd4b5d576..8c8d5817f 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplateSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplateSupport.java @@ -62,7 +62,7 @@ public CouchbaseDocument encodeEntity(final Object entityToEncode) { } @Override - public T decodeEntity(String id, String source, Long cas, Class entityClass, String scope, String collection, + public T decodeEntity(Object id, String source, Long cas, Class entityClass, String scope, String collection, Object txHolder, CouchbaseResourceHolder holder) { return decodeEntityBase(id, source, cas, entityClass, scope, collection, txHolder, holder); } diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/NonReactiveSupportWrapper.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/NonReactiveSupportWrapper.java index 6e1aa7102..2988393fd 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/NonReactiveSupportWrapper.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/NonReactiveSupportWrapper.java @@ -42,7 +42,7 @@ public Mono encodeEntity(Object entityToEncode) { } @Override - public Mono decodeEntity(String id, String source, Long cas, Class entityClass, String scope, String collection, + public Mono decodeEntity(Object id, String source, Long cas, Class entityClass, String scope, String collection, Object txResultHolder, CouchbaseResourceHolder holder) { return Mono.fromSupplier(() -> support.decodeEntity(id, source, cas, entityClass, scope, collection, txResultHolder, holder)); } diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateSupport.java index e886655d3..9c1f7fd4b 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateSupport.java @@ -69,7 +69,7 @@ ReactiveCouchbaseTemplate getReactiveTemplate() { } @Override - public Mono decodeEntity(String id, String source, Long cas, Class entityClass, String scope, + public Mono decodeEntity(Object id, String source, Long cas, Class entityClass, String scope, String collection, Object txResultHolder, CouchbaseResourceHolder holder) { return Mono .fromSupplier(() -> decodeEntityBase(id, source, cas, entityClass, scope, collection, txResultHolder, holder)); diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperation.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperation.java index 5e9983b0f..de9f15411 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperation.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperation.java @@ -58,7 +58,7 @@ interface TerminatingFindById extends OneAndAllIdReactive { * @param id the document ID. * @return the entity if found. */ - Mono one(String id); + Mono one(Object id); /** * Finds a list of documents based on the given IDs. diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperationSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperationSupport.java index a5d127f9e..25059d02c 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperationSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveFindByIdOperationSupport.java @@ -18,9 +18,6 @@ import static com.couchbase.client.java.kv.GetAndTouchOptions.getAndTouchOptions; import static com.couchbase.client.java.transactions.internal.ConverterUtil.makeCollectionIdentifier; -import com.couchbase.client.core.msg.kv.DurabilityLevel; -import com.couchbase.client.java.kv.PersistTo; -import com.couchbase.client.java.kv.ReplicateTo; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -88,7 +85,7 @@ static class ReactiveFindByIdSupport implements ReactiveFindById { } @Override - public Mono one(final String id) { + public Mono one(final Object id) { CommonOptions gOptions = initGetOptions(); PseudoArgs pArgs = new PseudoArgs(template, scope, collection, gOptions, domainType); @@ -101,17 +98,17 @@ public Mono one(final String id) { Mono reactiveEntity = TransactionalSupport.checkForTransactionInThreadLocalStorage().flatMap(ctxOpt -> { if (!ctxOpt.isPresent()) { if (pArgs.getOptions() instanceof GetAndTouchOptions) { - return rc.getAndTouch(id, expiryToUse(), (GetAndTouchOptions) pArgs.getOptions()) + return rc.getAndTouch(id.toString(), expiryToUse(), (GetAndTouchOptions) pArgs.getOptions()) .flatMap(result -> support.decodeEntity(id, result.contentAs(String.class), result.cas(), domainType, pArgs.getScope(), pArgs.getCollection(), null, null)); } else { - return rc.get(id, (GetOptions) pArgs.getOptions()) + return rc.get(id.toString(), (GetOptions) pArgs.getOptions()) .flatMap(result -> support.decodeEntity(id, result.contentAs(String.class), result.cas(), domainType, pArgs.getScope(), pArgs.getCollection(), null, null)); } } else { rejectInvalidTransactionalOptions(); - return ctxOpt.get().getCore().get(makeCollectionIdentifier(rc.async()), id) + return ctxOpt.get().getCore().get(makeCollectionIdentifier(rc.async()), id.toString()) .flatMap(result -> support.decodeEntity(id, new String(result.contentAsBytes(), StandardCharsets.UTF_8), result.cas(), domainType, pArgs.getScope(), pArgs.getCollection(), null, null)); diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveInsertByIdOperationSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveInsertByIdOperationSupport.java index 6aeb31a30..a7687814b 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveInsertByIdOperationSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveInsertByIdOperationSupport.java @@ -97,13 +97,13 @@ public Mono one(T object) { .flatMap(converted -> TransactionalSupport.checkForTransactionInThreadLocalStorage().flatMap(ctxOpt -> { if (!ctxOpt.isPresent()) { return collection.reactive() - .insert(converted.getId(), converted.export(), buildOptions(pArgs.getOptions(), converted)) + .insert(converted.getId().toString(), converted.export(), buildOptions(pArgs.getOptions(), converted)) .flatMap(result -> this.support.applyResult(object, converted, converted.getId(), result.cas(), null, null)); } else { rejectInvalidTransactionalOptions(); return ctxOpt.get().getCore() - .insert(makeCollectionIdentifier(collection.async()), converted.getId(), + .insert(makeCollectionIdentifier(collection.async()), converted.getId().toString(), template.getCouchbaseClientFactory().getCluster().environment().transcoder() .encode(converted.export()).encoded()) .flatMap(result -> this.support.applyResult(object, converted, converted.getId(), result.cas(), diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperation.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperation.java index a9189c980..00b99f2fa 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperation.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperation.java @@ -62,7 +62,7 @@ interface TerminatingRemoveById extends OneAndAllIdReactive { * @return result of the remove */ @Override - Mono one(String id); + Mono one(Object id); /** * Remove one document. Requires whole entity for transaction to have the cas. diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperationSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperationSupport.java index 9b4756e24..780afe3e4 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperationSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByIdOperationSupport.java @@ -91,7 +91,7 @@ static class ReactiveRemoveByIdSupport implements ReactiveRemoveById { } @Override - public Mono one(final String id) { + public Mono one(final Object id) { PseudoArgs pArgs = new PseudoArgs<>(template, scope, collection, options, domainType); if (LOG.isDebugEnabled()) { LOG.debug("removeById key={} {}", id, pArgs); @@ -101,7 +101,7 @@ public Mono one(final String id) { return TransactionalSupport.checkForTransactionInThreadLocalStorage().flatMap(s -> { if (!s.isPresent()) { - return rc.remove(id, buildRemoveOptions(pArgs.getOptions())).map(r -> RemoveResult.from(id, r)); + return rc.remove(id.toString(), buildRemoveOptions(pArgs.getOptions())).map(r -> RemoveResult.from(id.toString(), r)); } else { rejectInvalidTransactionalOptions(); @@ -109,13 +109,13 @@ public Mono one(final String id) { throw new IllegalArgumentException("cas must be supplied for tx remove"); } CoreTransactionAttemptContext ctx = s.get().getCore(); - Mono gr = ctx.get(makeCollectionIdentifier(rc.async()), id); + Mono gr = ctx.get(makeCollectionIdentifier(rc.async()), id.toString()); return gr.flatMap(getResult -> { if (getResult.cas() != cas) { return Mono.error(TransactionalSupport.retryTransactionOnCasMismatch(ctx, getResult.cas(), cas)); } - return ctx.remove(getResult).map(r -> new RemoveResult(id, 0, null)); + return ctx.remove(getResult).map(r -> new RemoveResult(id.toString(), 0, null)); }); } diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveReplaceByIdOperationSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveReplaceByIdOperationSupport.java index a4cc67065..bf7b6bda2 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveReplaceByIdOperationSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveReplaceByIdOperationSupport.java @@ -101,7 +101,7 @@ public Mono one(T object) { .flatMap(converted -> TransactionalSupport.checkForTransactionInThreadLocalStorage().flatMap(ctxOpt -> { if (!ctxOpt.isPresent()) { return collection.reactive() - .replace(converted.getId(), converted.export(), + .replace(converted.getId().toString(), converted.export(), buildReplaceOptions(pArgs.getOptions(), object, converted)) .flatMap(result -> support.applyResult(object, converted, converted.getId(), result.cas(), null, null)); @@ -117,8 +117,8 @@ public Mono one(T object) { CollectionIdentifier collId = makeCollectionIdentifier(collection.async()); CoreTransactionAttemptContext ctx = ctxOpt.get().getCore(); ctx.logger().info(ctx.attemptId(), "refetching %s for Spring replace", - DebugUtil.docId(collId, converted.getId())); - Mono gr = ctx.get(collId, converted.getId()); + DebugUtil.docId(collId, converted.getId().toString())); + Mono gr = ctx.get(collId, converted.getId().toString()); return gr.flatMap(getResult -> { if (getResult.cas() != cas) { diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveTemplateSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveTemplateSupport.java index 6acaa2f4e..1d43af037 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveTemplateSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveTemplateSupport.java @@ -30,7 +30,7 @@ public interface ReactiveTemplateSupport { Mono encodeEntity(Object entityToEncode); - Mono decodeEntity(String id, String source, Long cas, Class entityClass, String scope, String collection, + Mono decodeEntity(Object id, String source, Long cas, Class entityClass, String scope, String collection, Object txResultHolder, CouchbaseResourceHolder holder); Mono applyResult(T entity, CouchbaseDocument converted, Object id, Long cas, diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveUpsertByIdOperationSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveUpsertByIdOperationSupport.java index dbf27bb3c..bbbca8732 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveUpsertByIdOperationSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/ReactiveUpsertByIdOperationSupport.java @@ -95,7 +95,7 @@ public Mono one(T object) { .just(template.getCouchbaseClientFactory().withScope(pArgs.getScope()) .getCollection(pArgs.getCollection())) .flatMap(collection -> collection.reactive() - .upsert(converted.getId(), converted.export(), buildUpsertOptions(pArgs.getOptions(), converted)) + .upsert(converted.getId().toString(), converted.export(), buildUpsertOptions(pArgs.getOptions(), converted)) .flatMap( result -> support.applyResult(object, converted, converted.getId(), result.cas(), null, null))); }); diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/TemplateSupport.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/TemplateSupport.java index 273c67d88..fd3ad451e 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/TemplateSupport.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/TemplateSupport.java @@ -26,7 +26,7 @@ public interface TemplateSupport { CouchbaseDocument encodeEntity(Object entityToEncode); - T decodeEntity(String id, String source, Long cas, Class entityClass, String scope, String collection, + T decodeEntity(Object id, String source, Long cas, Class entityClass, String scope, String collection, Object txResultHolder, CouchbaseResourceHolder holder); T applyResult(T entity, CouchbaseDocument converted, Object id, long cas, Object txResultHolder, diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/mapping/CouchbaseDocument.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/mapping/CouchbaseDocument.java index ead8146ed..cf9bbe58e 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/mapping/CouchbaseDocument.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/mapping/CouchbaseDocument.java @@ -49,7 +49,7 @@ public class CouchbaseDocument implements CouchbaseStorable { /** * Represents the document ID used to identify the document in the bucket. */ - private String id; + private Object id; /** * Contains the expiration time of the document. @@ -68,7 +68,7 @@ public CouchbaseDocument() { * * @param id the document ID. */ - public CouchbaseDocument(final String id) { + public CouchbaseDocument(final Object id) { this(id, DEFAULT_EXPIRATION_TIME); } @@ -78,7 +78,7 @@ public CouchbaseDocument(final String id) { * @param id the document ID. * @param expiration the expiration time of the document. */ - public CouchbaseDocument(final String id, final int expiration) { + public CouchbaseDocument(final Object id, final int expiration) { this.id = id; this.expiration = expiration; content = new TreeMap<>(); @@ -245,7 +245,7 @@ public CouchbaseDocument setExpiration(int expiration) { * * @return the ID of the document. */ - public String getId() { + public Object getId() { return id; } @@ -255,7 +255,7 @@ public String getId() { * @param id the ID of the document. * @return the {@link CouchbaseDocument} for chaining. */ - public CouchbaseDocument setId(String id) { + public CouchbaseDocument setId(Object id) { this.id = id; return this; } diff --git a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/support/OneAndAllIdReactive.java b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/support/OneAndAllIdReactive.java index b7e000d65..611134f01 100644 --- a/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/support/OneAndAllIdReactive.java +++ b/spring-data-couchbase/src/main/java/org/springframework/data/couchbase/core/support/OneAndAllIdReactive.java @@ -28,7 +28,7 @@ */ public interface OneAndAllIdReactive { - Mono one(String id); + Mono one(Object id); Flux all(Collection ids); }