Skip to content

Commit b577e94

Browse files
sumitsg34maibin
authored andcommitted
BAEL-2520 code changes done (eugenp#6446)
1 parent 725a6e0 commit b577e94

File tree

3 files changed

+157
-1
lines changed

3 files changed

+157
-1
lines changed

persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemRepository.java

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

3+
import java.util.List;
4+
35
import org.springframework.stereotype.Repository;
46

57
import com.baeldung.domain.Item;
@@ -12,4 +14,8 @@ public interface CustomItemRepository {
1214
Item findItemById(Long id);
1315

1416
void findThenDelete(Long id);
17+
18+
List<Item> findItemsByColorAndGrade();
19+
20+
List<Item> findItemByColorOrGrade();
1521
}

persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemRepositoryImpl.java

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.baeldung.dao.repositories.impl;
22

3+
import java.util.List;
4+
35
import javax.persistence.EntityManager;
6+
import javax.persistence.criteria.CriteriaBuilder;
7+
import javax.persistence.criteria.CriteriaQuery;
8+
import javax.persistence.criteria.Predicate;
9+
import javax.persistence.criteria.Root;
410

511
import org.springframework.beans.factory.annotation.Autowired;
612
import org.springframework.stereotype.Repository;
713

8-
import com.baeldung.domain.Item;
914
import com.baeldung.dao.repositories.CustomItemRepository;
15+
import com.baeldung.domain.Item;
1016

1117
@Repository
1218
public class CustomItemRepositoryImpl implements CustomItemRepository {
@@ -29,4 +35,54 @@ public void findThenDelete(Long id) {
2935
final Item item = entityManager.find(Item.class, id);
3036
entityManager.remove(item);
3137
}
38+
39+
@Override
40+
public List<Item> findItemsByColorAndGrade() {
41+
42+
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
43+
CriteriaQuery<Item> criteriaQuery = criteriaBuilder.createQuery(Item.class);
44+
Root<Item> itemRoot = criteriaQuery.from(Item.class);
45+
46+
Predicate predicateForBlueColor = criteriaBuilder.equal(itemRoot.get("color"), "blue");
47+
Predicate predicateForRedColor = criteriaBuilder.equal(itemRoot.get("color"), "red");
48+
Predicate predicateForColor = criteriaBuilder.or(predicateForBlueColor, predicateForRedColor);
49+
50+
Predicate predicateForGradeA = criteriaBuilder.equal(itemRoot.get("grade"), "A");
51+
Predicate predicateForGradeB = criteriaBuilder.equal(itemRoot.get("grade"), "B");
52+
Predicate predicateForGrade = criteriaBuilder.or(predicateForGradeA, predicateForGradeB);
53+
54+
// final search filter
55+
Predicate finalPredicate = criteriaBuilder.and(predicateForColor, predicateForGrade);
56+
57+
criteriaQuery.where(finalPredicate);
58+
59+
List<Item> items = entityManager.createQuery(criteriaQuery)
60+
.getResultList();
61+
return items;
62+
}
63+
64+
@Override
65+
public List<Item> findItemByColorOrGrade() {
66+
67+
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
68+
CriteriaQuery<Item> criteriaQuery = criteriaBuilder.createQuery(Item.class);
69+
Root<Item> itemRoot = criteriaQuery.from(Item.class);
70+
71+
Predicate predicateForBlueColor = criteriaBuilder.equal(itemRoot.get("color"), "red");
72+
Predicate predicateForGradeA = criteriaBuilder.equal(itemRoot.get("grade"), "D");
73+
Predicate predicateForBlueColorAndGradeA = criteriaBuilder.and(predicateForBlueColor, predicateForGradeA);
74+
75+
Predicate predicateForRedColor = criteriaBuilder.equal(itemRoot.get("color"), "blue");
76+
Predicate predicateForGradeB = criteriaBuilder.equal(itemRoot.get("grade"), "B");
77+
Predicate predicateForRedColorAndGradeB = criteriaBuilder.and(predicateForRedColor, predicateForGradeB);
78+
79+
// final search filter
80+
Predicate finalPredicate = criteriaBuilder.or(predicateForBlueColorAndGradeA, predicateForRedColorAndGradeB);
81+
82+
criteriaQuery.where(finalPredicate);
83+
84+
List<Item> items = entityManager.createQuery(criteriaQuery)
85+
.getResultList();
86+
return items;
87+
}
3288
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.baeldung.dao.repositories.impl;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
6+
import java.util.List;
7+
8+
import javax.persistence.EntityManager;
9+
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
15+
import org.springframework.test.context.junit4.SpringRunner;
16+
import org.springframework.util.CollectionUtils;
17+
18+
import com.baeldung.config.PersistenceConfiguration;
19+
import com.baeldung.config.PersistenceProductConfiguration;
20+
import com.baeldung.config.PersistenceUserConfiguration;
21+
import com.baeldung.dao.repositories.CustomItemRepository;
22+
import com.baeldung.domain.Item;
23+
24+
@RunWith(SpringRunner.class)
25+
@DataJpaTest(excludeAutoConfiguration = { PersistenceConfiguration.class, PersistenceUserConfiguration.class, PersistenceProductConfiguration.class })
26+
public class CustomItemRepositoryIntegrationTest {
27+
28+
@Autowired
29+
CustomItemRepository customItemRepositoryImpl;
30+
31+
@Autowired
32+
EntityManager entityManager;
33+
34+
@Before
35+
public void setUp() {
36+
37+
Item firstItem = new Item();
38+
firstItem.setColor("blue");
39+
firstItem.setGrade("C");
40+
firstItem.setId(10l);
41+
42+
entityManager.persist(firstItem);
43+
44+
Item secondItem = new Item();
45+
secondItem.setColor("red");
46+
secondItem.setGrade("C");
47+
secondItem.setId(11l);
48+
49+
entityManager.persist(secondItem);
50+
51+
Item thirdItem = new Item();
52+
thirdItem.setColor("blue");
53+
thirdItem.setGrade("A");
54+
thirdItem.setId(12l);
55+
56+
entityManager.persist(thirdItem);
57+
58+
Item fourthItem = new Item();
59+
fourthItem.setColor("red");
60+
fourthItem.setGrade("D");
61+
fourthItem.setId(13l);
62+
63+
entityManager.persist(fourthItem);
64+
}
65+
66+
@Test
67+
public void givenItems_whenFindItemsByColorAndGrade_thenReturnItems() {
68+
69+
List<Item> items = customItemRepositoryImpl.findItemsByColorAndGrade();
70+
71+
assertFalse("No items found", CollectionUtils.isEmpty(items));
72+
assertEquals("There should be only one item", 1, items.size());
73+
74+
Item item = items.get(0);
75+
76+
assertEquals("this item do not have blue color", "blue", item.getColor());
77+
assertEquals("this item does not belong to A grade", "A", item.getGrade());
78+
}
79+
80+
@Test
81+
public void givenItems_whenFindItemByColorOrGrade_thenReturnItems() {
82+
83+
List<Item> items = customItemRepositoryImpl.findItemByColorOrGrade();
84+
85+
assertFalse("No items found", CollectionUtils.isEmpty(items));
86+
assertEquals("There should be only one item", 1, items.size());
87+
88+
Item item = items.get(0);
89+
90+
assertEquals("this item do not have red color", "red", item.getColor());
91+
assertEquals("this item does not belong to D grade", "D", item.getGrade());
92+
}
93+
94+
}

0 commit comments

Comments
 (0)