Skip to content

Commit d16bbff

Browse files
committed
Support enum arguments on repository queries.
Support enum in AbstractCouchbaseConverter.convertForWriteIfNeeded() and also call that from MappingCouchbaseConverter.getPotentiallyConvertedSimpleWrite() Closes #1069. Original pull request: #1112. Co-authored-by: mikereiche <[email protected]>
1 parent fe8d3fe commit d16bbff

File tree

5 files changed

+27
-10
lines changed

5 files changed

+27
-10
lines changed

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.data.couchbase.core.convert;
1818

1919
import java.util.Collections;
20+
import java.util.Optional;
2021

2122
import org.springframework.beans.factory.InitializingBean;
2223
import org.springframework.core.convert.ConversionService;
@@ -100,7 +101,8 @@ public Object convertForWriteIfNeeded(Object value) {
100101

101102
return this.conversions.getCustomWriteTarget(value.getClass()) //
102103
.map(it -> (Object) this.conversionService.convert(value, it)) //
103-
.orElse(value);
104+
.orElseGet(() -> Enum.class.isAssignableFrom(value.getClass()) ? ((Enum<?>) value).name() : value);
105+
104106
}
105107

106108
@Override

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

+2-9
Original file line numberDiff line numberDiff line change
@@ -774,15 +774,8 @@ private void writeSimpleInternal(final Object source, final CouchbaseDocument ta
774774
target.put(key, getPotentiallyConvertedSimpleWrite(source));
775775
}
776776

777-
private Object getPotentiallyConvertedSimpleWrite(final Object value) {
778-
if (value == null) {
779-
return null;
780-
}
781-
782-
Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(value.getClass());
783-
784-
return customTarget.map(it -> (Object) conversionService.convert(value, it))
785-
.orElseGet(() -> Enum.class.isAssignableFrom(value.getClass()) ? ((Enum<?>) value).name() : value);
777+
public Object getPotentiallyConvertedSimpleWrite(final Object value) {
778+
return convertForWriteIfNeeded(value);
786779
}
787780

788781
/**

src/test/java/org/springframework/data/couchbase/domain/AirportRepository.java

+3
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public interface AirportRepository extends PagingAndSortingRepository<Airport, S
5050
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
5151
Airport findByIata(String iata);
5252

53+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
54+
Airport findByIata(Iata iata);
55+
5356
@Query("#{#n1ql.selectEntity} where iata = $1")
5457
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
5558
List<Airport> getAllByIata(String iata);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.springframework.data.couchbase.domain;
2+
3+
public enum Iata {
4+
vie,
5+
xxx
6+
}

src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java

+13
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.springframework.data.couchbase.domain.Address;
4848
import org.springframework.data.couchbase.domain.Airport;
4949
import org.springframework.data.couchbase.domain.AirportRepository;
50+
import org.springframework.data.couchbase.domain.Iata;
5051
import org.springframework.data.couchbase.domain.Person;
5152
import org.springframework.data.couchbase.domain.PersonRepository;
5253
import org.springframework.data.couchbase.domain.User;
@@ -167,6 +168,18 @@ void findBySimpleProperty() {
167168
}
168169
}
169170

171+
@Test
172+
void findByEnum() {
173+
Airport vie = null;
174+
try {
175+
vie = new Airport("airports::vie", "vie", "loww");
176+
vie = airportRepository.save(vie);
177+
Airport airport2 = airportRepository.findByIata(Iata.vie);
178+
assertEquals(airport2.getId(), vie.getId());
179+
} finally {
180+
airportRepository.delete(vie);
181+
}
182+
}
170183
@Test
171184
public void testCas() {
172185
User user = new User("1", "Dave", "Wilson");

0 commit comments

Comments
 (0)