|
22 | 22 | import static org.springframework.data.jdbc.testing.TestDatabaseFeatures.Feature.*;
|
23 | 23 |
|
24 | 24 | import java.time.LocalDateTime;
|
| 25 | +import java.util.*; |
25 | 26 | import java.util.ArrayList;
|
26 |
| -import java.util.Collections; |
27 |
| -import java.util.HashMap; |
28 |
| -import java.util.HashSet; |
29 |
| -import java.util.Iterator; |
30 |
| -import java.util.List; |
31 |
| -import java.util.Map; |
32 |
| -import java.util.Objects; |
33 |
| -import java.util.Optional; |
34 |
| -import java.util.Set; |
35 | 27 | import java.util.function.Function;
|
36 | 28 | import java.util.stream.IntStream;
|
37 | 29 |
|
|
61 | 53 | import org.springframework.data.mapping.context.InvalidPersistentPropertyPath;
|
62 | 54 | import org.springframework.data.relational.core.conversion.DbActionExecutionException;
|
63 | 55 | import org.springframework.data.relational.core.mapping.Column;
|
| 56 | +import org.springframework.data.relational.core.mapping.Embedded; |
64 | 57 | import org.springframework.data.relational.core.mapping.InsertOnlyProperty;
|
65 | 58 | import org.springframework.data.relational.core.mapping.MappedCollection;
|
66 | 59 | import org.springframework.data.relational.core.mapping.RelationalMappingContext;
|
@@ -778,6 +771,36 @@ void saveAndLoadAnEntityWithSet() {
|
778 | 771 | assertThat(reloaded.digits).isEqualTo(new HashSet<>(asList("one", "two", "three")));
|
779 | 772 | }
|
780 | 773 |
|
| 774 | + @Test //GH-1737 |
| 775 | + @EnabledOnFeature(SUPPORTS_ARRAYS) |
| 776 | + void saveAndLoadEmbeddedArray() { |
| 777 | + |
| 778 | + EmbeddedStringListOwner embeddedStringListOwner = new EmbeddedStringListOwner(); |
| 779 | + embeddedStringListOwner.embeddedStringList = new EmbeddedStringList(); |
| 780 | + embeddedStringListOwner.embeddedStringList.digits = List.of("one", "two", "three"); |
| 781 | + |
| 782 | + EmbeddedStringListOwner saved = template.save(embeddedStringListOwner); |
| 783 | + |
| 784 | + EmbeddedStringListOwner reloaded = template.findById(saved.id, EmbeddedStringListOwner.class); |
| 785 | + |
| 786 | + assertThat(reloaded.embeddedStringList.digits).containsExactly("one", "two", "three"); |
| 787 | + } |
| 788 | + |
| 789 | + @Test //GH-1737 |
| 790 | + @EnabledOnFeature(SUPPORTS_ARRAYS) |
| 791 | + void saveAndLoadEmptyEmbeddedArray() { |
| 792 | + |
| 793 | + EmbeddedStringListOwner embeddedStringListOwner = new EmbeddedStringListOwner(); |
| 794 | + embeddedStringListOwner.embeddedStringList = new EmbeddedStringList(); |
| 795 | + embeddedStringListOwner.embeddedStringList.digits = emptyList(); |
| 796 | + |
| 797 | + EmbeddedStringListOwner saved = template.save(embeddedStringListOwner); |
| 798 | + |
| 799 | + EmbeddedStringListOwner reloaded = template.findById(saved.id, EmbeddedStringListOwner.class); |
| 800 | + |
| 801 | + assertThat(reloaded.embeddedStringList).isNull(); |
| 802 | + } |
| 803 | + |
781 | 804 | @Test
|
782 | 805 | // DATAJDBC-327
|
783 | 806 | void saveAndLoadAnEntityWithByteArray() {
|
@@ -919,7 +942,7 @@ void readOnlyGetsLoadedButNotWritten() {
|
919 | 942 |
|
920 | 943 | assertThat(
|
921 | 944 | jdbcTemplate.queryForObject("SELECT read_only FROM with_read_only", Collections.emptyMap(), String.class))
|
922 |
| - .isEqualTo("from-db"); |
| 945 | + .isEqualTo("from-db"); |
923 | 946 | }
|
924 | 947 |
|
925 | 948 | @Test
|
@@ -1258,15 +1281,16 @@ void recordOfSet() {
|
1258 | 1281 | @Test // GH-1656
|
1259 | 1282 | void mapWithEnumKey() {
|
1260 | 1283 |
|
1261 |
| - EnumMapOwner enumMapOwner = template.save(new EnumMapOwner(null, "OwnerName", Map.of(Color.BLUE, new MapElement("Element")))); |
| 1284 | + EnumMapOwner enumMapOwner = template |
| 1285 | + .save(new EnumMapOwner(null, "OwnerName", Map.of(Color.BLUE, new MapElement("Element")))); |
1262 | 1286 |
|
1263 | 1287 | Iterable<EnumMapOwner> enumMapOwners = template.findAll(EnumMapOwner.class);
|
1264 | 1288 |
|
1265 | 1289 | assertThat(enumMapOwners).containsExactly(enumMapOwner);
|
1266 | 1290 | }
|
1267 | 1291 |
|
1268 | 1292 | @Test // GH-1684
|
1269 |
| - void oneToOneWithIdenticalIdColumnName(){ |
| 1293 | + void oneToOneWithIdenticalIdColumnName() { |
1270 | 1294 |
|
1271 | 1295 | WithOneToOne saved = template.insert(new WithOneToOne("one", new Referenced(23L)));
|
1272 | 1296 |
|
@@ -1369,6 +1393,17 @@ private static class FloatListOwner {
|
1369 | 1393 | List<Float> digits = new ArrayList<>();
|
1370 | 1394 | }
|
1371 | 1395 |
|
| 1396 | + @Table("ARRAY_OWNER") |
| 1397 | + private static class EmbeddedStringListOwner { |
| 1398 | + @Id Long id; |
| 1399 | + |
| 1400 | + @Embedded(onEmpty = Embedded.OnEmpty.USE_NULL, prefix = "") EmbeddedStringList embeddedStringList; |
| 1401 | + } |
| 1402 | + |
| 1403 | + private static class EmbeddedStringList { |
| 1404 | + List<String> digits = new ArrayList<>(); |
| 1405 | + } |
| 1406 | + |
1372 | 1407 | static class LegoSet {
|
1373 | 1408 |
|
1374 | 1409 | @Column("id1")
|
@@ -2096,7 +2131,8 @@ record Book(String name) {
|
2096 | 2131 | record EnumMapOwner(@Id Long id, String name, Map<Color, MapElement> map) {
|
2097 | 2132 | }
|
2098 | 2133 |
|
2099 |
| - record WithOneToOne(@Id String id,@MappedCollection(idColumn = "renamed") Referenced referenced){} |
| 2134 | + record WithOneToOne(@Id String id, @MappedCollection(idColumn = "renamed") Referenced referenced) { |
| 2135 | + } |
2100 | 2136 |
|
2101 | 2137 | record Referenced(@Id Long id) {
|
2102 | 2138 | }
|
|
0 commit comments