DATACOUCH-390 - Adapt API changes for immutable entity support.
Related tickets: DATACMNS-1322.
This commit is contained in:
@@ -578,7 +578,7 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationEventP
|
||||
final PersistType persistType) {
|
||||
ensureNotIterable(objectToPersist);
|
||||
|
||||
final ConvertingPropertyAccessor accessor = getPropertyAccessor(objectToPersist);
|
||||
final ConvertingPropertyAccessor<Object> accessor = getPropertyAccessor(objectToPersist);
|
||||
final CouchbasePersistentEntity<?> persistentEntity = mappingContext.getRequiredPersistentEntity(objectToPersist.getClass());
|
||||
final CouchbasePersistentProperty versionProperty = persistentEntity.getVersionProperty();
|
||||
final Long version = versionProperty != null ? accessor.getProperty(versionProperty, Long.class) : null;
|
||||
@@ -692,28 +692,30 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationEventP
|
||||
}
|
||||
|
||||
private <T> T mapToEntity(String id, Document<String> data, Class<T> entityClass) {
|
||||
|
||||
if (data == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final CouchbaseDocument converted = new CouchbaseDocument(id);
|
||||
Object readEntity = converter.read(entityClass, (CouchbaseDocument) decodeAndUnwrap(data, converted));
|
||||
T readEntity = converter.read(entityClass, (CouchbaseDocument) decodeAndUnwrap(data, converted));
|
||||
|
||||
final ConvertingPropertyAccessor accessor = getPropertyAccessor(readEntity);
|
||||
final ConvertingPropertyAccessor<T> accessor = getPropertyAccessor(readEntity);
|
||||
CouchbasePersistentEntity<?> persistentEntity = mappingContext.getRequiredPersistentEntity(readEntity.getClass());
|
||||
|
||||
if (persistentEntity.getVersionProperty() != null) {
|
||||
accessor.setProperty(persistentEntity.getVersionProperty(), data.cas());
|
||||
}
|
||||
}
|
||||
|
||||
return (T) readEntity;
|
||||
return accessor.getBean();
|
||||
}
|
||||
|
||||
private final ConvertingPropertyAccessor getPropertyAccessor(Object source) {
|
||||
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
|
||||
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(source);
|
||||
private final <T> ConvertingPropertyAccessor<T> getPropertyAccessor(T source) {
|
||||
|
||||
return new ConvertingPropertyAccessor(accessor, converter.getConversionService());
|
||||
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
|
||||
PersistentPropertyAccessor<T> accessor = entity.getPropertyAccessor(source);
|
||||
|
||||
return new ConvertingPropertyAccessor<>(accessor, converter.getConversionService());
|
||||
}
|
||||
|
||||
private void checkN1ql() {
|
||||
|
||||
@@ -194,11 +194,12 @@ public class RxJavaCouchbaseTemplate implements RxJavaCouchbaseOperations {
|
||||
return c;
|
||||
}
|
||||
|
||||
private final ConvertingPropertyAccessor getPropertyAccessor(Object source) {
|
||||
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
|
||||
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(source);
|
||||
private final <T> ConvertingPropertyAccessor<T> getPropertyAccessor(T source) {
|
||||
|
||||
return new ConvertingPropertyAccessor(accessor, converter.getConversionService());
|
||||
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
|
||||
PersistentPropertyAccessor<T> accessor = entity.getPropertyAccessor(source);
|
||||
|
||||
return new ConvertingPropertyAccessor<>(accessor, converter.getConversionService());
|
||||
}
|
||||
|
||||
private <T> Observable<T> doPersist(T objectToPersist, PersistType persistType, PersistTo persistTo, ReplicateTo replicateTo) {
|
||||
@@ -227,12 +228,9 @@ public class RxJavaCouchbaseTemplate implements RxJavaCouchbaseOperations {
|
||||
break;
|
||||
}
|
||||
return persistFunction.call(toJsonDocument(objectToPersist), persistTo, replicateTo)
|
||||
.flatMap(storedDoc -> {
|
||||
if (storedDoc != null && storedDoc.cas() != 0) {
|
||||
setVersion(objectToPersist, storedDoc.cas());
|
||||
}
|
||||
return Observable.just(objectToPersist);
|
||||
})
|
||||
.flatMap(storedDoc -> Observable.just(storedDoc != null && storedDoc.cas() != 0
|
||||
? setVersion(objectToPersist, storedDoc.cas())
|
||||
: objectToPersist))
|
||||
.onErrorResumeNext(e -> {
|
||||
if (e instanceof DocumentAlreadyExistsException) {
|
||||
throw new OptimisticLockingFailureException(persistType.springDataOperationName +
|
||||
@@ -259,22 +257,25 @@ public class RxJavaCouchbaseTemplate implements RxJavaCouchbaseOperations {
|
||||
}
|
||||
|
||||
private <T> Long getVersion(T object) {
|
||||
final ConvertingPropertyAccessor accessor = getPropertyAccessor(object);
|
||||
|
||||
CouchbasePersistentProperty versionProperty = versionProperty(object);
|
||||
|
||||
if (versionProperty != null) {
|
||||
return accessor.getProperty(versionProperty, Long.class);
|
||||
}
|
||||
return null;
|
||||
return versionProperty == null //
|
||||
? null //
|
||||
: getPropertyAccessor(object).getProperty(versionProperty, Long.class);
|
||||
}
|
||||
|
||||
private <T> void setVersion(T object, long cas) {
|
||||
final ConvertingPropertyAccessor accessor = getPropertyAccessor(object);
|
||||
private <T> T setVersion(T object, long version) {
|
||||
|
||||
CouchbasePersistentProperty versionProperty = versionProperty(object);
|
||||
|
||||
if (versionProperty != null) {
|
||||
accessor.setProperty(versionProperty, cas);
|
||||
if (versionProperty == null) {
|
||||
return object;
|
||||
}
|
||||
|
||||
final ConvertingPropertyAccessor<T> accessor = getPropertyAccessor(object);
|
||||
accessor.setProperty(versionProperty, version);
|
||||
return accessor.getBean();
|
||||
}
|
||||
|
||||
private <T> Observable<T> doRemove(T objectToRemove, final PersistTo persistTo, final ReplicateTo replicateTo) {
|
||||
|
||||
@@ -464,7 +464,7 @@ public class MappingCouchbaseConverter extends AbstractCouchbaseConverter
|
||||
throw new MappingException("No mapping metadata found for entity of type " + source.getClass().getName());
|
||||
}
|
||||
|
||||
final ConvertingPropertyAccessor accessor = getPropertyAccessor(source);
|
||||
final ConvertingPropertyAccessor<Object> accessor = getPropertyAccessor(source);
|
||||
final CouchbasePersistentProperty idProperty = entity.getIdProperty();
|
||||
final CouchbasePersistentProperty versionProperty = entity.getVersionProperty();
|
||||
|
||||
@@ -811,11 +811,12 @@ public class MappingCouchbaseConverter extends AbstractCouchbaseConverter
|
||||
}
|
||||
}
|
||||
|
||||
private ConvertingPropertyAccessor getPropertyAccessor(Object source) {
|
||||
private ConvertingPropertyAccessor<Object> getPropertyAccessor(Object source) {
|
||||
|
||||
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
|
||||
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(source);
|
||||
PersistentPropertyAccessor<Object> accessor = entity.getPropertyAccessor(source);
|
||||
|
||||
return new ConvertingPropertyAccessor(accessor, conversionService);
|
||||
return new ConvertingPropertyAccessor<>(accessor, conversionService);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user