Try Object.class if cannot get persistent entity for class. (#1737)

Closes #1726.
This commit is contained in:
Michael Reiche
2023-05-11 11:12:12 -07:00
committed by mikereiche
parent e4e2f466c0
commit 8ea76196ea
3 changed files with 66 additions and 1 deletions

View File

@@ -20,6 +20,7 @@ import static org.springframework.data.couchbase.core.mapping.id.GenerationStrat
import static org.springframework.data.couchbase.core.mapping.id.GenerationStrategy.USE_ATTRIBUTES;
import java.beans.Transient;
import java.lang.reflect.InaccessibleObjectException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -982,7 +983,16 @@ public class MappingCouchbaseConverter extends AbstractCouchbaseConverter implem
private ConvertingPropertyAccessor<Object> getPropertyAccessor(Object source) {
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
CouchbasePersistentEntity<?> entity = null;
try {
entity = mappingContext.getRequiredPersistentEntity(source.getClass());
} catch(InaccessibleObjectException e){
try { // punt
entity = mappingContext.getRequiredPersistentEntity(Object.class);
} catch(Exception ee){
throw e;
}
}
PersistentPropertyAccessor<Object> accessor = entity.getPropertyAccessor(source);
return new ConvertingPropertyAccessor<>(accessor, conversionService);

View File

@@ -26,8 +26,12 @@ import static org.springframework.data.couchbase.core.query.N1QLExpression.i;
import java.time.Instant;
import java.time.temporal.TemporalAccessor;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -42,6 +46,7 @@ import org.springframework.data.couchbase.domain.AssessmentDO;
import org.springframework.data.couchbase.domain.Config;
import org.springframework.data.couchbase.domain.Course;
import org.springframework.data.couchbase.domain.NaiveAuditorAware;
import org.springframework.data.couchbase.domain.PersonWithMaps;
import org.springframework.data.couchbase.domain.Submission;
import org.springframework.data.couchbase.domain.User;
import org.springframework.data.couchbase.domain.UserJustLastName;
@@ -127,6 +132,27 @@ class CouchbaseTemplateQueryIntegrationTests extends JavaIntegrationTests {
}
@Test
void findById() {
PersonWithMaps person1 = new PersonWithMaps();
person1.setId(UUID.randomUUID().toString());
Map<String, Set<String>> versions=new HashMap<>();
Set<String> versionSet = new HashSet<>();
versionSet.add("1.0");
versions.put("v",versionSet);
person1.setVersions(versions);
Map<String, Map<String, String>> releaseVersions = new HashMap<>();
Map<String,String> releaseMap = new HashMap<>();
releaseMap.put("1","1");
releaseVersions.put("1",releaseMap);
person1.setReleaseVersions(releaseVersions);
couchbaseTemplate.upsertById(PersonWithMaps.class).one(person1);
PersonWithMaps person2 = couchbaseTemplate.findById(PersonWithMaps.class).one(person1.getId());
assertEquals(person1, person2);
couchbaseTemplate.removeById(PersonWithMaps.class).oneEntity(person1);
}
@Test
void findByMatchingQuery() {
User user1 = new User(UUID.randomUUID().toString(), "user1", "user1");

View File

@@ -0,0 +1,29 @@
package org.springframework.data.couchbase.domain;
import com.couchbase.client.core.deps.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.couchbase.core.mapping.Document;
import org.springframework.data.couchbase.core.mapping.Field;
import java.util.Map;
import java.util.Set;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@Document
public class PersonWithMaps {
@Id
private String id;
@Field
private Map<String, Set<String>> versions;
@Field
private Map<String, Map<String,String>> releaseVersions;
public PersonWithMaps(){
}
}