Skip to content

Commit 2245370

Browse files
author
Eugen
committed
Merge pull request eugenp#237 from alex-semenyuk/master
Added support common annotation
2 parents ed2b7e4 + a690614 commit 2245370

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package org.baeldung.model;
22

3+
import java.util.Calendar;
4+
35
import org.baeldung.annotation.CascadeSave;
6+
import org.springframework.beans.factory.annotation.Value;
47
import org.springframework.data.annotation.Id;
8+
import org.springframework.data.annotation.PersistenceConstructor;
9+
import org.springframework.data.annotation.Transient;
10+
import org.springframework.data.mongodb.core.index.CompoundIndex;
11+
import org.springframework.data.mongodb.core.index.CompoundIndexes;
512
import org.springframework.data.mongodb.core.index.IndexDirection;
613
import org.springframework.data.mongodb.core.index.Indexed;
714
import org.springframework.data.mongodb.core.mapping.DBRef;
@@ -12,20 +19,34 @@
1219

1320
@QueryEntity
1421
@Document
22+
@CompoundIndexes({ @CompoundIndex(name = "email_age", def = "{'email.id' : 1, 'age': 1}") })
1523
public class User {
1624

1725
@Id
1826
private String id;
1927
@Indexed(direction = IndexDirection.ASCENDING)
2028
private String name;
21-
29+
@Indexed(direction = IndexDirection.ASCENDING)
2230
private Integer age;
2331

2432
@DBRef
2533
@Field("email")
2634
@CascadeSave
2735
private EmailAddress emailAddress;
2836

37+
@Transient
38+
private Integer yearOfBirth;
39+
40+
public User() {
41+
}
42+
43+
@PersistenceConstructor
44+
public User(final String name, @Value("#root.age ?: 0") final Integer age, final EmailAddress emailAddress) {
45+
this.name = name;
46+
this.age = age;
47+
this.emailAddress = emailAddress;
48+
}
49+
2950
public String getId() {
3051
return id;
3152
}
@@ -57,4 +78,8 @@ public EmailAddress getEmailAddress() {
5778
public void setEmailAddress(EmailAddress emailAddress) {
5879
this.emailAddress = emailAddress;
5980
}
81+
82+
public Integer getYearOfBirth() {
83+
return Calendar.getInstance().get(Calendar.YEAR) - age;
84+
}
6085
}

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void givenUserExistsWithIndexAddedFromMapping_whenCheckingIndex_thenIndex
153153
public void whenSavingUserWithEmailAddress_thenUserandEmailAddressSaved() {
154154
final User user = new User();
155155
user.setName("Brendan");
156-
EmailAddress emailAddress = new EmailAddress();
156+
final EmailAddress emailAddress = new EmailAddress();
157157
emailAddress.setValue("[email protected]");
158158
user.setEmailAddress(emailAddress);
159159
mongoTemplate.insert(user);
@@ -172,4 +172,22 @@ public void givenUserExistsWithIndexAddedFromCode_whenCheckingIndex_thenIndexIsE
172172

173173
assertThat(indexInfos.size(), is(2));
174174
}
175+
176+
@Test
177+
public void whenSavingUserWithoutSettingAge_thenAgeIsSetByDefault() {
178+
final User user = new User();
179+
user.setName("Alex");
180+
mongoTemplate.insert(user);
181+
182+
assertThat(mongoTemplate.findOne(Query.query(Criteria.where("name").is("Alex")), User.class).getAge(), is(0));
183+
}
184+
185+
@Test
186+
public void whenSavingUser_thenYearOfBirthIsCalculated() {
187+
final User user = new User();
188+
user.setName("Alex");
189+
mongoTemplate.insert(user);
190+
191+
assertThat(mongoTemplate.findOne(Query.query(Criteria.where("name").is("Alex")), User.class).getYearOfBirth(), is(2015));
192+
}
175193
}

0 commit comments

Comments
 (0)