From 3e4f69fb747c1c429a3fef23ce656f13f78ad7f6 Mon Sep 17 00:00:00 2001 From: coach88 Date: Fri, 14 Aug 2015 18:50:33 +0300 Subject: [PATCH] Added event on saving User cascade save EmailAddress --- .../java/org/baeldung/config/MongoConfig.java | 7 ++++ .../main/java/org/baeldung/model/User.java | 9 ++-- .../DocumentQueryIntegrationTest.java | 18 ++++---- .../MongoTemplateQueryIntegrationTest.java | 42 +++++++++++++++++++ .../UserRepositoryIntegrationTest.java | 29 ------------- 5 files changed, 66 insertions(+), 39 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java index d9214c182b..7a789b1859 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java @@ -1,5 +1,7 @@ package org.baeldung.config; +import org.baeldung.event.CascadingMongoEventListener; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.config.AbstractMongoConfiguration; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; @@ -25,4 +27,9 @@ public class MongoConfig extends AbstractMongoConfiguration { public String getMappingBasePackage() { return "org.baeldung"; } + + @Bean + public CascadingMongoEventListener cascadingMongoEventListener(){ + return new CascadingMongoEventListener(); + } } diff --git a/spring-data-mongodb/src/main/java/org/baeldung/model/User.java b/spring-data-mongodb/src/main/java/org/baeldung/model/User.java index d314263b4e..77d53ffbe9 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/model/User.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/model/User.java @@ -1,8 +1,8 @@ package org.baeldung.model; +import org.baeldung.annotation.CascadeSave; import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.index.CompoundIndex; -import org.springframework.data.mongodb.core.index.CompoundIndexes; +import org.springframework.data.mongodb.core.index.IndexDirection; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.DBRef; import org.springframework.data.mongodb.core.mapping.Document; @@ -16,11 +16,14 @@ public class User { @Id private String id; + @Indexed(direction = IndexDirection.ASCENDING) private String name; + private Integer age; @DBRef - @Indexed @Field("email") + @CascadeSave + private EmailAddress emailAddress; public String getId() { diff --git a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryIntegrationTest.java index 83867dd423..cf46c6ed6e 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryIntegrationTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryIntegrationTest.java @@ -7,6 +7,7 @@ import java.util.Iterator; import java.util.List; import org.baeldung.config.MongoConfig; +import org.baeldung.model.EmailAddress; import org.baeldung.model.User; import org.junit.After; import org.junit.Before; @@ -31,11 +32,14 @@ public class DocumentQueryIntegrationTest { @Before public void testSetup() { - mongoTemplate.createCollection(User.class); + if (!mongoTemplate.collectionExists(User.class)) { + mongoTemplate.createCollection(User.class); + } } @After public void tearDown() { + mongoTemplate.dropCollection(EmailAddress.class); mongoTemplate.dropCollection(User.class); } @@ -102,7 +106,7 @@ public class DocumentQueryIntegrationTest { query.addCriteria(Criteria.where("name").regex("^A")); List users = mongoTemplate.find(query, User.class); - + assertThat(users.size(), is(2)); } @@ -127,7 +131,7 @@ public class DocumentQueryIntegrationTest { query.addCriteria(Criteria.where("name").regex("c$")); List users = mongoTemplate.find(query, User.class); - + assertThat(users.size(), is(1)); } @@ -153,7 +157,7 @@ public class DocumentQueryIntegrationTest { query.with(pageableRequest); List users = mongoTemplate.find(query, User.class); - + assertThat(users.size(), is(2)); } @@ -178,11 +182,11 @@ public class DocumentQueryIntegrationTest { query.with(new Sort(Sort.Direction.ASC, "age")); List users = mongoTemplate.find(query, User.class); - + Iterator iter = users.iterator(); - assertThat(users.size(), is(3)); + assertThat(users.size(), is(3)); assertThat(iter.next().getName(), is("Antony")); assertThat(iter.next().getName(), is("Alice")); - assertThat(iter.next().getName(), is("Eric")); + assertThat(iter.next().getName(), is("Eric")); } } diff --git a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java index 2a8a2fd71b..71ec9277b5 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java @@ -6,6 +6,7 @@ import static org.junit.Assert.assertThat; import java.util.List; import org.baeldung.config.MongoConfig; +import org.baeldung.model.EmailAddress; import org.baeldung.model.User; import org.junit.After; import org.junit.Before; @@ -15,7 +16,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.index.Index; +import org.springframework.data.mongodb.core.index.IndexInfo; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.test.context.ContextConfiguration; @@ -128,4 +132,42 @@ public class MongoTemplateQueryIntegrationTest { List users = mongoTemplate.find(query, User.class); assertThat(users.size(), is(3)); } + + @Test + public void givenUserExistsWithIndexAddedFromMapping_whenCheckingIndex_thenIndexIsExisted() { + User user = new User(); + user.setName("Brendan"); + EmailAddress emailAddress = new EmailAddress(); + emailAddress.setValue("a@gmail.com"); + user.setEmailAddress(emailAddress); + mongoTemplate.insert(user); + + List indexInfos = mongoTemplate.indexOps("user").getIndexInfo(); + + assertThat(indexInfos.size(), is(1)); + } + + @Test + public void givenExisted() { + User user = new User(); + user.setName("Brendan"); + EmailAddress emailAddress = new EmailAddress(); + emailAddress.setValue("b@gmail.com"); + user.setEmailAddress(emailAddress); + mongoTemplate.insert(user); + + assertThat(mongoTemplate.findOne(Query.query(Criteria.where("name").is("Brendan")), User.class).getEmailAddress().getValue(), is("b@gmail.com")); + } + + @Test + public void givenUserExistsWithIndexAddedFromCode_whenCheckingIndex_thenIndexIsExisted() { + User user = new User(); + user.setName("Brendan"); + mongoTemplate.indexOps(User.class).ensureIndex(new Index().on("name", Direction.ASC)); + mongoTemplate.insert(user); + + List indexInfos = mongoTemplate.indexOps("user").getIndexInfo(); + + assertThat(indexInfos.size(), is(2)); + } } diff --git a/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java index ea8a6b8e7e..7524aacda2 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java @@ -6,7 +6,6 @@ import static org.junit.Assert.assertThat; import java.util.List; import org.baeldung.config.MongoConfig; -import org.baeldung.model.EmailAddress; import org.baeldung.model.User; import org.junit.After; import org.junit.Before; @@ -17,10 +16,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.data.mongodb.core.index.Index; -import org.springframework.data.mongodb.core.index.IndexInfo; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.test.context.ContextConfiguration; @@ -149,30 +145,5 @@ public class UserRepositoryIntegrationTest { assertThat(users.size(), is(1)); assertThat(page.getTotalPages(), is(2)); } - - @Test - public void givenUserExistsWithIndexAddedFromMapping_whenCheckingIndex_thenIndexIsExisted() { - User user = new User(); - user.setName("Brendan"); - EmailAddress emailAddress = new EmailAddress("a@gmail.com"); - mongoOps.insert(emailAddress); - user.setEmailAddress(emailAddress); - mongoOps.insert(user); - - List indexInfos = mongoOps.indexOps("user").getIndexInfo(); - assertThat(indexInfos.size(), is(1)); - } - - @Test - public void givenUserExistsWithIndexAddedFromCode_whenCheckingIndex_thenIndexIsExisted() { - User user = new User(); - user.setName("Brendan"); - mongoOps.indexOps(User.class).ensureIndex(new Index().on("name", Direction.ASC)); - mongoOps.insert(user); - - List indexInfos = mongoOps.indexOps("user").getIndexInfo(); - - assertThat(indexInfos.size(), is(2)); - } }