|
63 | 63 | import org.springframework.data.annotation.PersistenceConstructor;
|
64 | 64 | import org.springframework.data.annotation.Transient;
|
65 | 65 | import org.springframework.data.annotation.TypeAlias;
|
| 66 | +import org.springframework.data.convert.ConverterBuilder; |
66 | 67 | import org.springframework.data.convert.CustomConversions;
|
67 | 68 | import org.springframework.data.convert.PropertyValueConverter;
|
68 | 69 | import org.springframework.data.convert.PropertyValueConverterFactory;
|
@@ -2693,6 +2694,44 @@ void shouldWriteNullPropertyCorrectly() {
|
2693 | 2694 | converter.write(fieldWrite, document);
|
2694 | 2695 |
|
2695 | 2696 | assertThat(document).containsEntry("writeAlways", null).doesNotContainKey("writeNonNull");
|
| 2697 | + assertThat(document).containsEntry("writeAlwaysPersonDBRef", null).doesNotContainKey("writeNonNullPersonDBRef"); |
| 2698 | + } |
| 2699 | + |
| 2700 | + @Test // GH-4710 |
| 2701 | + void shouldWriteSimplePropertyCorrectlyAfterConversionReturnsNull() { |
| 2702 | + |
| 2703 | + MongoCustomConversions conversions = new MongoCustomConversions(ConverterBuilder.writing(Integer.class, String.class, it -> null).andReading(it -> null).getConverters().stream().toList()); |
| 2704 | + |
| 2705 | + converter = new MappingMongoConverter(resolver, mappingContext); |
| 2706 | + converter.setCustomConversions(conversions); |
| 2707 | + converter.afterPropertiesSet(); |
| 2708 | + |
| 2709 | + WithFieldWrite fieldWrite = new WithFieldWrite(); |
| 2710 | + fieldWrite.writeAlways = 10; |
| 2711 | + fieldWrite.writeNonNull = 20; |
| 2712 | + |
| 2713 | + org.bson.Document document = new org.bson.Document(); |
| 2714 | + converter.write(fieldWrite, document); |
| 2715 | + |
| 2716 | + assertThat(document).containsEntry("writeAlways", null).doesNotContainKey("writeNonNull"); |
| 2717 | + } |
| 2718 | + |
| 2719 | + @Test // GH-4710 |
| 2720 | + void shouldWriteComplexPropertyCorrectlyAfterConversionReturnsNull() { |
| 2721 | + |
| 2722 | + MongoCustomConversions conversions = new MongoCustomConversions(ConverterBuilder.writing(Person.class, String.class, it -> null).andReading(it -> null).getConverters().stream().toList()); |
| 2723 | + |
| 2724 | + converter = new MappingMongoConverter(resolver, mappingContext); |
| 2725 | + converter.setCustomConversions(conversions); |
| 2726 | + converter.afterPropertiesSet(); |
| 2727 | + |
| 2728 | + WithFieldWrite fieldWrite = new WithFieldWrite(); |
| 2729 | + fieldWrite.writeAlwaysPerson = new Person(); |
| 2730 | + fieldWrite.writeNonNullPerson = new Person(); |
| 2731 | + |
| 2732 | + org.bson.Document document = new org.bson.Document(); |
| 2733 | + converter.write(fieldWrite, document); |
| 2734 | + |
2696 | 2735 | assertThat(document).containsEntry("writeAlwaysPerson", null).doesNotContainKey("writeNonNullPerson");
|
2697 | 2736 | }
|
2698 | 2737 |
|
@@ -4102,13 +4141,19 @@ static class WithFieldWrite {
|
4102 | 4141 | @org.springframework.data.mongodb.core.mapping.Field(
|
4103 | 4142 | write = org.springframework.data.mongodb.core.mapping.Field.Write.ALWAYS) Integer writeAlways;
|
4104 | 4143 |
|
| 4144 | + @org.springframework.data.mongodb.core.mapping.Field( |
| 4145 | + write = org.springframework.data.mongodb.core.mapping.Field.Write.NON_NULL) Person writeNonNullPerson; |
| 4146 | + |
| 4147 | + @org.springframework.data.mongodb.core.mapping.Field( |
| 4148 | + write = org.springframework.data.mongodb.core.mapping.Field.Write.ALWAYS) Person writeAlwaysPerson; |
| 4149 | + |
4105 | 4150 | @org.springframework.data.mongodb.core.mapping.DBRef
|
4106 | 4151 | @org.springframework.data.mongodb.core.mapping.Field(
|
4107 |
| - write = org.springframework.data.mongodb.core.mapping.Field.Write.NON_NULL) Person writeNonNullPerson; |
| 4152 | + write = org.springframework.data.mongodb.core.mapping.Field.Write.NON_NULL) Person writeNonNullPersonDBRef; |
4108 | 4153 |
|
4109 | 4154 | @org.springframework.data.mongodb.core.mapping.DBRef
|
4110 | 4155 | @org.springframework.data.mongodb.core.mapping.Field(
|
4111 |
| - write = org.springframework.data.mongodb.core.mapping.Field.Write.ALWAYS) Person writeAlwaysPerson; |
| 4156 | + write = org.springframework.data.mongodb.core.mapping.Field.Write.ALWAYS) Person writeAlwaysPersonDBRef; |
4112 | 4157 |
|
4113 | 4158 | }
|
4114 | 4159 |
|
|
0 commit comments