Skip to content

Commit 3e4f69f

Browse files
committed
Added event on saving User cascade save EmailAddress
1 parent 13cf53a commit 3e4f69f

File tree

5 files changed

+66
-39
lines changed

5 files changed

+66
-39
lines changed

spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.baeldung.config;
22

3+
import org.baeldung.event.CascadingMongoEventListener;
4+
import org.springframework.context.annotation.Bean;
35
import org.springframework.context.annotation.Configuration;
46
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
57
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@@ -25,4 +27,9 @@ public Mongo mongo() throws Exception {
2527
public String getMappingBasePackage() {
2628
return "org.baeldung";
2729
}
30+
31+
@Bean
32+
public CascadingMongoEventListener cascadingMongoEventListener(){
33+
return new CascadingMongoEventListener();
34+
}
2835
}

spring-data-mongodb/src/main/java/org/baeldung/model/User.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.baeldung.model;
22

3+
import org.baeldung.annotation.CascadeSave;
34
import org.springframework.data.annotation.Id;
4-
import org.springframework.data.mongodb.core.index.CompoundIndex;
5-
import org.springframework.data.mongodb.core.index.CompoundIndexes;
5+
import org.springframework.data.mongodb.core.index.IndexDirection;
66
import org.springframework.data.mongodb.core.index.Indexed;
77
import org.springframework.data.mongodb.core.mapping.DBRef;
88
import org.springframework.data.mongodb.core.mapping.Document;
@@ -16,11 +16,14 @@ public class User {
1616

1717
@Id
1818
private String id;
19+
@Indexed(direction = IndexDirection.ASCENDING)
1920
private String name;
21+
2022
private Integer age;
2123
@DBRef
22-
@Indexed
2324
@Field("email")
25+
@CascadeSave
26+
2427
private EmailAddress emailAddress;
2528

2629
public String getId() {

spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryIntegrationTest.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.List;
88

99
import org.baeldung.config.MongoConfig;
10+
import org.baeldung.model.EmailAddress;
1011
import org.baeldung.model.User;
1112
import org.junit.After;
1213
import org.junit.Before;
@@ -31,11 +32,14 @@ public class DocumentQueryIntegrationTest {
3132

3233
@Before
3334
public void testSetup() {
34-
mongoTemplate.createCollection(User.class);
35+
if (!mongoTemplate.collectionExists(User.class)) {
36+
mongoTemplate.createCollection(User.class);
37+
}
3538
}
3639

3740
@After
3841
public void tearDown() {
42+
mongoTemplate.dropCollection(EmailAddress.class);
3943
mongoTemplate.dropCollection(User.class);
4044
}
4145

@@ -102,7 +106,7 @@ public void givenUsersExist_whenFindingUserWithNameStartWithA_thenUsersAreFound(
102106
query.addCriteria(Criteria.where("name").regex("^A"));
103107

104108
List<User> users = mongoTemplate.find(query, User.class);
105-
109+
106110
assertThat(users.size(), is(2));
107111
}
108112

@@ -127,7 +131,7 @@ public void givenUsersExist_whenFindingUserWithNameEndWithC_thenUsersAreFound()
127131
query.addCriteria(Criteria.where("name").regex("c$"));
128132

129133
List<User> users = mongoTemplate.find(query, User.class);
130-
134+
131135
assertThat(users.size(), is(1));
132136
}
133137

@@ -153,7 +157,7 @@ public void givenUsersExist_whenFindingByPage_thenUsersAreFoundByPage() {
153157
query.with(pageableRequest);
154158

155159
List<User> users = mongoTemplate.find(query, User.class);
156-
160+
157161
assertThat(users.size(), is(2));
158162
}
159163

@@ -178,11 +182,11 @@ public void givenUsersExist_whenFindingUsersAndSortThem_thenUsersAreFoundAndSort
178182
query.with(new Sort(Sort.Direction.ASC, "age"));
179183

180184
List<User> users = mongoTemplate.find(query, User.class);
181-
185+
182186
Iterator<User> iter = users.iterator();
183-
assertThat(users.size(), is(3));
187+
assertThat(users.size(), is(3));
184188
assertThat(iter.next().getName(), is("Antony"));
185189
assertThat(iter.next().getName(), is("Alice"));
186-
assertThat(iter.next().getName(), is("Eric"));
190+
assertThat(iter.next().getName(), is("Eric"));
187191
}
188192
}

spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.List;
77

88
import org.baeldung.config.MongoConfig;
9+
import org.baeldung.model.EmailAddress;
910
import org.baeldung.model.User;
1011
import org.junit.After;
1112
import org.junit.Before;
@@ -15,7 +16,10 @@
1516
import org.springframework.data.domain.PageRequest;
1617
import org.springframework.data.domain.Pageable;
1718
import org.springframework.data.domain.Sort;
19+
import org.springframework.data.domain.Sort.Direction;
1820
import org.springframework.data.mongodb.core.MongoTemplate;
21+
import org.springframework.data.mongodb.core.index.Index;
22+
import org.springframework.data.mongodb.core.index.IndexInfo;
1923
import org.springframework.data.mongodb.core.query.Criteria;
2024
import org.springframework.data.mongodb.core.query.Query;
2125
import org.springframework.test.context.ContextConfiguration;
@@ -128,4 +132,42 @@ public void givenUsersExist_whenFindingUsersAndSortThem_thenUsersAreFoundAndSort
128132
List<User> users = mongoTemplate.find(query, User.class);
129133
assertThat(users.size(), is(3));
130134
}
135+
136+
@Test
137+
public void givenUserExistsWithIndexAddedFromMapping_whenCheckingIndex_thenIndexIsExisted() {
138+
User user = new User();
139+
user.setName("Brendan");
140+
EmailAddress emailAddress = new EmailAddress();
141+
emailAddress.setValue("[email protected]");
142+
user.setEmailAddress(emailAddress);
143+
mongoTemplate.insert(user);
144+
145+
List<IndexInfo> indexInfos = mongoTemplate.indexOps("user").getIndexInfo();
146+
147+
assertThat(indexInfos.size(), is(1));
148+
}
149+
150+
@Test
151+
public void givenExisted() {
152+
User user = new User();
153+
user.setName("Brendan");
154+
EmailAddress emailAddress = new EmailAddress();
155+
emailAddress.setValue("[email protected]");
156+
user.setEmailAddress(emailAddress);
157+
mongoTemplate.insert(user);
158+
159+
assertThat(mongoTemplate.findOne(Query.query(Criteria.where("name").is("Brendan")), User.class).getEmailAddress().getValue(), is("[email protected]"));
160+
}
161+
162+
@Test
163+
public void givenUserExistsWithIndexAddedFromCode_whenCheckingIndex_thenIndexIsExisted() {
164+
User user = new User();
165+
user.setName("Brendan");
166+
mongoTemplate.indexOps(User.class).ensureIndex(new Index().on("name", Direction.ASC));
167+
mongoTemplate.insert(user);
168+
169+
List<IndexInfo> indexInfos = mongoTemplate.indexOps("user").getIndexInfo();
170+
171+
assertThat(indexInfos.size(), is(2));
172+
}
131173
}

spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.List;
77

88
import org.baeldung.config.MongoConfig;
9-
import org.baeldung.model.EmailAddress;
109
import org.baeldung.model.User;
1110
import org.junit.After;
1211
import org.junit.Before;
@@ -17,10 +16,7 @@
1716
import org.springframework.data.domain.PageRequest;
1817
import org.springframework.data.domain.Pageable;
1918
import org.springframework.data.domain.Sort;
20-
import org.springframework.data.domain.Sort.Direction;
2119
import org.springframework.data.mongodb.core.MongoOperations;
22-
import org.springframework.data.mongodb.core.index.Index;
23-
import org.springframework.data.mongodb.core.index.IndexInfo;
2420
import org.springframework.data.mongodb.core.query.Criteria;
2521
import org.springframework.data.mongodb.core.query.Query;
2622
import org.springframework.test.context.ContextConfiguration;
@@ -149,30 +145,5 @@ public void givenUsersExist_whenFindingAllUsersWithPagination_thenUsersAreFoundA
149145
assertThat(users.size(), is(1));
150146
assertThat(page.getTotalPages(), is(2));
151147
}
152-
153-
@Test
154-
public void givenUserExistsWithIndexAddedFromMapping_whenCheckingIndex_thenIndexIsExisted() {
155-
User user = new User();
156-
user.setName("Brendan");
157-
EmailAddress emailAddress = new EmailAddress("[email protected]");
158-
mongoOps.insert(emailAddress);
159-
user.setEmailAddress(emailAddress);
160-
mongoOps.insert(user);
161-
162-
List<IndexInfo> indexInfos = mongoOps.indexOps("user").getIndexInfo();
163148

164-
assertThat(indexInfos.size(), is(1));
165-
}
166-
167-
@Test
168-
public void givenUserExistsWithIndexAddedFromCode_whenCheckingIndex_thenIndexIsExisted() {
169-
User user = new User();
170-
user.setName("Brendan");
171-
mongoOps.indexOps(User.class).ensureIndex(new Index().on("name", Direction.ASC));
172-
mongoOps.insert(user);
173-
174-
List<IndexInfo> indexInfos = mongoOps.indexOps("user").getIndexInfo();
175-
176-
assertThat(indexInfos.size(), is(2));
177-
}
178149
}

0 commit comments

Comments
 (0)