Skip to content

Commit 502c532

Browse files
authored
Try Object.class if cannot get persistent entity for class. (#1737)
Closes #1726.
1 parent 354ddd4 commit 502c532

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.springframework.data.couchbase.core.mapping.id.GenerationStrategy.USE_ATTRIBUTES;
2121

2222
import java.beans.Transient;
23+
import java.lang.reflect.InaccessibleObjectException;
2324
import java.util.ArrayList;
2425
import java.util.Collection;
2526
import java.util.Collections;
@@ -982,7 +983,16 @@ public <R> R readValue(Object value, CouchbasePersistentProperty prop, Object pa
982983

983984
private ConvertingPropertyAccessor<Object> getPropertyAccessor(Object source) {
984985

985-
CouchbasePersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(source.getClass());
986+
CouchbasePersistentEntity<?> entity = null;
987+
try {
988+
entity = mappingContext.getRequiredPersistentEntity(source.getClass());
989+
} catch(InaccessibleObjectException e){
990+
try { // punt
991+
entity = mappingContext.getRequiredPersistentEntity(Object.class);
992+
} catch(Exception ee){
993+
throw e;
994+
}
995+
}
986996
PersistentPropertyAccessor<Object> accessor = entity.getPropertyAccessor(source);
987997

988998
return new ConvertingPropertyAccessor<>(accessor, conversionService);

src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryIntegrationTests.java

+26
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@
2626
import java.time.Instant;
2727
import java.time.temporal.TemporalAccessor;
2828
import java.util.Arrays;
29+
import java.util.HashMap;
30+
import java.util.HashSet;
2931
import java.util.List;
3032
import java.util.Locale;
33+
import java.util.Map;
34+
import java.util.Set;
3135
import java.util.UUID;
3236
import java.util.stream.Collectors;
3337

@@ -42,6 +46,7 @@
4246
import org.springframework.data.couchbase.domain.Config;
4347
import org.springframework.data.couchbase.domain.Course;
4448
import org.springframework.data.couchbase.domain.NaiveAuditorAware;
49+
import org.springframework.data.couchbase.domain.PersonWithMaps;
4550
import org.springframework.data.couchbase.domain.Submission;
4651
import org.springframework.data.couchbase.domain.User;
4752
import org.springframework.data.couchbase.domain.UserJustLastName;
@@ -127,6 +132,27 @@ void findByQueryAll() {
127132

128133
}
129134

135+
136+
@Test
137+
void findById() {
138+
PersonWithMaps person1 = new PersonWithMaps();
139+
person1.setId(UUID.randomUUID().toString());
140+
Map<String, Set<String>> versions=new HashMap<>();
141+
Set<String> versionSet = new HashSet<>();
142+
versionSet.add("1.0");
143+
versions.put("v",versionSet);
144+
person1.setVersions(versions);
145+
Map<String, Map<String, String>> releaseVersions = new HashMap<>();
146+
Map<String,String> releaseMap = new HashMap<>();
147+
releaseMap.put("1","1");
148+
releaseVersions.put("1",releaseMap);
149+
person1.setReleaseVersions(releaseVersions);
150+
couchbaseTemplate.upsertById(PersonWithMaps.class).one(person1);
151+
PersonWithMaps person2 = couchbaseTemplate.findById(PersonWithMaps.class).one(person1.getId());
152+
assertEquals(person1, person2);
153+
couchbaseTemplate.removeById(PersonWithMaps.class).oneEntity(person1);
154+
}
155+
130156
@Test
131157
void findByMatchingQuery() {
132158
User user1 = new User(UUID.randomUUID().toString(), "user1", "user1");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.springframework.data.couchbase.domain;
2+
3+
import com.couchbase.client.core.deps.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import lombok.Data;
6+
import org.springframework.data.annotation.Id;
7+
import org.springframework.data.couchbase.core.mapping.Document;
8+
import org.springframework.data.couchbase.core.mapping.Field;
9+
10+
import java.util.Map;
11+
import java.util.Set;
12+
13+
@Data
14+
@JsonIgnoreProperties(ignoreUnknown = true)
15+
@JsonInclude(JsonInclude.Include.NON_NULL)
16+
@Document
17+
public class PersonWithMaps {
18+
19+
@Id
20+
private String id;
21+
@Field
22+
private Map<String, Set<String>> versions;
23+
@Field
24+
private Map<String, Map<String,String>> releaseVersions;
25+
26+
public PersonWithMaps(){
27+
28+
}
29+
}

0 commit comments

Comments
 (0)