BAEL-2520 code moved to java-jpa module (#6525)
* BAEL-2520 code changes done * BAEL-2520 moved code to java-jpa module * BAEL-2520 moved code to java-jpa module
This commit is contained in:
parent
2cdae3f8b9
commit
527e3440ac
|
@ -0,0 +1,49 @@
|
||||||
|
package com.baeldung.jpa.criteria.entity;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Table(name = "item")
|
||||||
|
@Entity
|
||||||
|
public class Item {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
private String color;
|
||||||
|
private String grade;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGrade() {
|
||||||
|
return grade;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColor(String color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGrade(String grade) {
|
||||||
|
this.grade = grade;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.baeldung.jpa.criteria.repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.baeldung.jpa.criteria.entity.Item;
|
||||||
|
|
||||||
|
public interface CustomItemRepository {
|
||||||
|
|
||||||
|
List<Item> findItemsByColorAndGrade();
|
||||||
|
|
||||||
|
List<Item> findItemByColorOrGrade();
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.baeldung.jpa.criteria.repository.impl;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
import javax.persistence.Persistence;
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Predicate;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
|
import com.baeldung.jpa.criteria.entity.Item;
|
||||||
|
import com.baeldung.jpa.criteria.repository.CustomItemRepository;
|
||||||
|
|
||||||
|
public class CustomItemRepositoryImpl implements CustomItemRepository {
|
||||||
|
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
public CustomItemRepositoryImpl() {
|
||||||
|
super();
|
||||||
|
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa-h2-criteria");
|
||||||
|
entityManager = factory.createEntityManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Item> findItemsByColorAndGrade() {
|
||||||
|
|
||||||
|
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
|
||||||
|
CriteriaQuery<Item> criteriaQuery = criteriaBuilder.createQuery(Item.class);
|
||||||
|
Root<Item> itemRoot = criteriaQuery.from(Item.class);
|
||||||
|
|
||||||
|
Predicate predicateForBlueColor = criteriaBuilder.equal(itemRoot.get("color"), "blue");
|
||||||
|
Predicate predicateForRedColor = criteriaBuilder.equal(itemRoot.get("color"), "red");
|
||||||
|
Predicate predicateForColor = criteriaBuilder.or(predicateForBlueColor, predicateForRedColor);
|
||||||
|
|
||||||
|
Predicate predicateForGradeA = criteriaBuilder.equal(itemRoot.get("grade"), "A");
|
||||||
|
Predicate predicateForGradeB = criteriaBuilder.equal(itemRoot.get("grade"), "B");
|
||||||
|
Predicate predicateForGrade = criteriaBuilder.or(predicateForGradeA, predicateForGradeB);
|
||||||
|
|
||||||
|
// final search filter
|
||||||
|
Predicate finalPredicate = criteriaBuilder.and(predicateForColor, predicateForGrade);
|
||||||
|
|
||||||
|
criteriaQuery.where(finalPredicate);
|
||||||
|
|
||||||
|
List<Item> items = entityManager.createQuery(criteriaQuery)
|
||||||
|
.getResultList();
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Item> findItemByColorOrGrade() {
|
||||||
|
|
||||||
|
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
|
||||||
|
CriteriaQuery<Item> criteriaQuery = criteriaBuilder.createQuery(Item.class);
|
||||||
|
Root<Item> itemRoot = criteriaQuery.from(Item.class);
|
||||||
|
|
||||||
|
Predicate predicateForBlueColor = criteriaBuilder.equal(itemRoot.get("color"), "red");
|
||||||
|
Predicate predicateForGradeA = criteriaBuilder.equal(itemRoot.get("grade"), "D");
|
||||||
|
Predicate predicateForBlueColorAndGradeA = criteriaBuilder.and(predicateForBlueColor, predicateForGradeA);
|
||||||
|
|
||||||
|
Predicate predicateForRedColor = criteriaBuilder.equal(itemRoot.get("color"), "blue");
|
||||||
|
Predicate predicateForGradeB = criteriaBuilder.equal(itemRoot.get("grade"), "B");
|
||||||
|
Predicate predicateForRedColorAndGradeB = criteriaBuilder.and(predicateForRedColor, predicateForGradeB);
|
||||||
|
|
||||||
|
// final search filter
|
||||||
|
Predicate finalPredicate = criteriaBuilder.or(predicateForBlueColorAndGradeA, predicateForRedColorAndGradeB);
|
||||||
|
|
||||||
|
criteriaQuery.where(finalPredicate);
|
||||||
|
|
||||||
|
List<Item> items = entityManager.createQuery(criteriaQuery)
|
||||||
|
.getResultList();
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
}
|
|
@ -88,4 +88,25 @@
|
||||||
</properties>
|
</properties>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
|
||||||
|
<persistence-unit name="jpa-h2-criteria">
|
||||||
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
|
<class>com.baeldung.jpa.criteria.entity.Item</class>
|
||||||
|
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||||
|
<properties>
|
||||||
|
<property name="javax.persistence.jdbc.driver"
|
||||||
|
value="org.h2.Driver" />
|
||||||
|
<property name="javax.persistence.jdbc.url"
|
||||||
|
value="jdbc:h2:mem:test" />
|
||||||
|
<property name="javax.persistence.jdbc.user" value="sa" />
|
||||||
|
<property name="javax.persistence.jdbc.password" value="" />
|
||||||
|
<property name="hibernate.dialect"
|
||||||
|
value="org.hibernate.dialect.H2Dialect" />
|
||||||
|
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
|
||||||
|
<property name="show_sql" value="true" />
|
||||||
|
<property name="hibernate.temp.use_jdbc_metadata_defaults"
|
||||||
|
value="false" />
|
||||||
|
<property name="javax.persistence.sql-load-script-source" value="item.sql"/>
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
|
||||||
</persistence>
|
</persistence>
|
|
@ -0,0 +1,44 @@
|
||||||
|
package com.baeldung.jpa.criteria.repository.impl;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.baeldung.jpa.criteria.entity.Item;
|
||||||
|
import com.baeldung.jpa.criteria.repository.CustomItemRepository;
|
||||||
|
|
||||||
|
public class CustomItemRepositoryIntegrationTest {
|
||||||
|
|
||||||
|
CustomItemRepository customItemRepository = new CustomItemRepositoryImpl();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenItems_whenFindItemsByColorAndGrade_thenReturnItems() {
|
||||||
|
|
||||||
|
List<Item> items = customItemRepository.findItemsByColorAndGrade();
|
||||||
|
|
||||||
|
assertFalse("No items found", items.isEmpty());
|
||||||
|
assertEquals("There should be only one item", 1, items.size());
|
||||||
|
|
||||||
|
Item item = items.get(0);
|
||||||
|
|
||||||
|
assertEquals("this item do not have blue color", "blue", item.getColor());
|
||||||
|
assertEquals("this item does not belong to A grade", "A", item.getGrade());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenItems_whenFindItemByColorOrGrade_thenReturnItems() {
|
||||||
|
|
||||||
|
List<Item> items = customItemRepository.findItemByColorOrGrade();
|
||||||
|
|
||||||
|
assertFalse("No items found", items.isEmpty());
|
||||||
|
assertEquals("There should be only one item", 1, items.size());
|
||||||
|
|
||||||
|
Item item = items.get(0);
|
||||||
|
|
||||||
|
assertEquals("this item do not have red color", "red", item.getColor());
|
||||||
|
assertEquals("this item does not belong to D grade", "D", item.getGrade());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
insert into item(id,grade,color) values (10,'C','blue');
|
||||||
|
insert into item(id,grade,color) values (11,'C','red');
|
||||||
|
insert into item(id,grade,color) values (12,'A','blue');
|
||||||
|
insert into item(id,grade,color) values (13,'D','red');
|
|
@ -1,7 +1,5 @@
|
||||||
package com.baeldung.dao.repositories;
|
package com.baeldung.dao.repositories;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import com.baeldung.domain.Item;
|
import com.baeldung.domain.Item;
|
||||||
|
@ -15,7 +13,4 @@ public interface CustomItemRepository {
|
||||||
|
|
||||||
void findThenDelete(Long id);
|
void findThenDelete(Long id);
|
||||||
|
|
||||||
List<Item> findItemsByColorAndGrade();
|
|
||||||
|
|
||||||
List<Item> findItemByColorOrGrade();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
package com.baeldung.dao.repositories.impl;
|
package com.baeldung.dao.repositories.impl;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
import javax.persistence.criteria.CriteriaBuilder;
|
|
||||||
import javax.persistence.criteria.CriteriaQuery;
|
|
||||||
import javax.persistence.criteria.Predicate;
|
|
||||||
import javax.persistence.criteria.Root;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
@ -36,53 +30,4 @@ public class CustomItemRepositoryImpl implements CustomItemRepository {
|
||||||
entityManager.remove(item);
|
entityManager.remove(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Item> findItemsByColorAndGrade() {
|
|
||||||
|
|
||||||
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
|
|
||||||
CriteriaQuery<Item> criteriaQuery = criteriaBuilder.createQuery(Item.class);
|
|
||||||
Root<Item> itemRoot = criteriaQuery.from(Item.class);
|
|
||||||
|
|
||||||
Predicate predicateForBlueColor = criteriaBuilder.equal(itemRoot.get("color"), "blue");
|
|
||||||
Predicate predicateForRedColor = criteriaBuilder.equal(itemRoot.get("color"), "red");
|
|
||||||
Predicate predicateForColor = criteriaBuilder.or(predicateForBlueColor, predicateForRedColor);
|
|
||||||
|
|
||||||
Predicate predicateForGradeA = criteriaBuilder.equal(itemRoot.get("grade"), "A");
|
|
||||||
Predicate predicateForGradeB = criteriaBuilder.equal(itemRoot.get("grade"), "B");
|
|
||||||
Predicate predicateForGrade = criteriaBuilder.or(predicateForGradeA, predicateForGradeB);
|
|
||||||
|
|
||||||
// final search filter
|
|
||||||
Predicate finalPredicate = criteriaBuilder.and(predicateForColor, predicateForGrade);
|
|
||||||
|
|
||||||
criteriaQuery.where(finalPredicate);
|
|
||||||
|
|
||||||
List<Item> items = entityManager.createQuery(criteriaQuery)
|
|
||||||
.getResultList();
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Item> findItemByColorOrGrade() {
|
|
||||||
|
|
||||||
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
|
|
||||||
CriteriaQuery<Item> criteriaQuery = criteriaBuilder.createQuery(Item.class);
|
|
||||||
Root<Item> itemRoot = criteriaQuery.from(Item.class);
|
|
||||||
|
|
||||||
Predicate predicateForBlueColor = criteriaBuilder.equal(itemRoot.get("color"), "red");
|
|
||||||
Predicate predicateForGradeA = criteriaBuilder.equal(itemRoot.get("grade"), "D");
|
|
||||||
Predicate predicateForBlueColorAndGradeA = criteriaBuilder.and(predicateForBlueColor, predicateForGradeA);
|
|
||||||
|
|
||||||
Predicate predicateForRedColor = criteriaBuilder.equal(itemRoot.get("color"), "blue");
|
|
||||||
Predicate predicateForGradeB = criteriaBuilder.equal(itemRoot.get("grade"), "B");
|
|
||||||
Predicate predicateForRedColorAndGradeB = criteriaBuilder.and(predicateForRedColor, predicateForGradeB);
|
|
||||||
|
|
||||||
// final search filter
|
|
||||||
Predicate finalPredicate = criteriaBuilder.or(predicateForBlueColorAndGradeA, predicateForRedColorAndGradeB);
|
|
||||||
|
|
||||||
criteriaQuery.where(finalPredicate);
|
|
||||||
|
|
||||||
List<Item> items = entityManager.createQuery(criteriaQuery)
|
|
||||||
.getResultList();
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
package com.baeldung.dao.repositories.impl;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import com.baeldung.config.PersistenceConfiguration;
|
|
||||||
import com.baeldung.config.PersistenceProductConfiguration;
|
|
||||||
import com.baeldung.config.PersistenceUserConfiguration;
|
|
||||||
import com.baeldung.dao.repositories.CustomItemRepository;
|
|
||||||
import com.baeldung.domain.Item;
|
|
||||||
|
|
||||||
@RunWith(SpringRunner.class)
|
|
||||||
@DataJpaTest(excludeAutoConfiguration = { PersistenceConfiguration.class, PersistenceUserConfiguration.class, PersistenceProductConfiguration.class })
|
|
||||||
public class CustomItemRepositoryIntegrationTest {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
CustomItemRepository customItemRepositoryImpl;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
EntityManager entityManager;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
|
|
||||||
Item firstItem = new Item();
|
|
||||||
firstItem.setColor("blue");
|
|
||||||
firstItem.setGrade("C");
|
|
||||||
firstItem.setId(10l);
|
|
||||||
|
|
||||||
entityManager.persist(firstItem);
|
|
||||||
|
|
||||||
Item secondItem = new Item();
|
|
||||||
secondItem.setColor("red");
|
|
||||||
secondItem.setGrade("C");
|
|
||||||
secondItem.setId(11l);
|
|
||||||
|
|
||||||
entityManager.persist(secondItem);
|
|
||||||
|
|
||||||
Item thirdItem = new Item();
|
|
||||||
thirdItem.setColor("blue");
|
|
||||||
thirdItem.setGrade("A");
|
|
||||||
thirdItem.setId(12l);
|
|
||||||
|
|
||||||
entityManager.persist(thirdItem);
|
|
||||||
|
|
||||||
Item fourthItem = new Item();
|
|
||||||
fourthItem.setColor("red");
|
|
||||||
fourthItem.setGrade("D");
|
|
||||||
fourthItem.setId(13l);
|
|
||||||
|
|
||||||
entityManager.persist(fourthItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenItems_whenFindItemsByColorAndGrade_thenReturnItems() {
|
|
||||||
|
|
||||||
List<Item> items = customItemRepositoryImpl.findItemsByColorAndGrade();
|
|
||||||
|
|
||||||
assertFalse("No items found", CollectionUtils.isEmpty(items));
|
|
||||||
assertEquals("There should be only one item", 1, items.size());
|
|
||||||
|
|
||||||
Item item = items.get(0);
|
|
||||||
|
|
||||||
assertEquals("this item do not have blue color", "blue", item.getColor());
|
|
||||||
assertEquals("this item does not belong to A grade", "A", item.getGrade());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenItems_whenFindItemByColorOrGrade_thenReturnItems() {
|
|
||||||
|
|
||||||
List<Item> items = customItemRepositoryImpl.findItemByColorOrGrade();
|
|
||||||
|
|
||||||
assertFalse("No items found", CollectionUtils.isEmpty(items));
|
|
||||||
assertEquals("There should be only one item", 1, items.size());
|
|
||||||
|
|
||||||
Item item = items.get(0);
|
|
||||||
|
|
||||||
assertEquals("this item do not have red color", "red", item.getColor());
|
|
||||||
assertEquals("this item does not belong to D grade", "D", item.getGrade());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue