JAVA-10083 Create new module hibernate-queries from spring-hibernate-5 module

This commit is contained in:
anuragkumawat
2022-03-03 21:57:58 +05:30
parent e35043c319
commit d4bb07e759
19 changed files with 250 additions and 2 deletions

View File

@@ -5,7 +5,6 @@ This module contains articles about Hibernate 5 with Spring.
### Relevant articles
- [Programmatic Transactions in the Spring TestContext Framework](https://www.baeldung.com/spring-test-programmatic-transactions)
- [JPA Criteria Queries](https://www.baeldung.com/hibernate-criteria-queries)
- [Introduction to Hibernate Search](https://www.baeldung.com/hibernate-search)
- [@DynamicUpdate with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-dynamicupdate)
- [Hibernate Second-Level Cache](http://www.baeldung.com/hibernate-second-level-cache)

View File

@@ -1,81 +0,0 @@
package com.baeldung.hibernate.criteria.model;
import java.io.Serializable;
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
private Integer itemId;
private String itemName;
private String itemDescription;
private Integer itemPrice;
// constructors
public Item() {
}
public Item(final Integer itemId, final String itemName, final String itemDescription) {
super();
this.itemId = itemId;
this.itemName = itemName;
this.itemDescription = itemDescription;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((itemId == null) ? 0 : itemId.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Item other = (Item) obj;
if (itemId == null) {
if (other.itemId != null)
return false;
} else if (!itemId.equals(other.itemId))
return false;
return true;
}
public Integer getItemId() {
return itemId;
}
public void setItemId(final Integer itemId) {
this.itemId = itemId;
}
public String getItemName() {
return itemName;
}
public void setItemName(final String itemName) {
this.itemName = itemName;
}
public String getItemDescription() {
return itemDescription;
}
public Integer getItemPrice() {
return itemPrice;
}
public void setItemPrice(final Integer itemPrice) {
this.itemPrice = itemPrice;
}
public void setItemDescription(final String itemDescription) {
this.itemDescription = itemDescription;
}
}

View File

@@ -1,19 +0,0 @@
package com.baeldung.hibernate.criteria.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
@SuppressWarnings("deprecation")
public static Session getHibernateSession() {
final SessionFactory sf = new Configuration().configure("criteria.cfg.xml").buildSessionFactory();
// factory = new Configuration().configure().buildSessionFactory();
final Session session = sf.openSession();
return session;
}
}

View File

@@ -1,354 +0,0 @@
/**
* ApplicationViewer is the class that starts the application
* First it creates the session object and then creates the
* criteria query.
*
* @author Pritam Banerjee
* @version 1.0
* @since 07/20/2016
*/
package com.baeldung.hibernate.criteria.view;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.query.Query;
import com.baeldung.hibernate.criteria.model.Item;
import com.baeldung.hibernate.criteria.util.HibernateUtil;
public class ApplicationView {
// default Constructor
public ApplicationView() {
}
public boolean checkIfCriteriaTimeLower() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
// calculate the time taken by criteria
final long startTimeCriteria = System.nanoTime();
cr.select(root)
.where(cb.like(root.get("itemName"), "%item One%"));
// .add(Restrictions.like("itemName", "%item One%"));
Query<Item> query = session.createQuery(cr);
final List<Item> results = query.getResultList();
final long endTimeCriteria = System.nanoTime();
final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000;
// calculate the time taken by HQL
final long startTimeHQL = System.nanoTime();
session.beginTransaction();
final List<Item> items = session.createQuery("FROM Item where itemName like '%item One%'")
.list();
final long endTimeHQL = System.nanoTime();
final long durationHQL = (endTimeHQL - startTimeHQL) / 1000;
if (durationCriteria > durationHQL) {
return false;
} else {
return true;
}
}
// To get items having price more than 1000
public String[] greaterThanCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.gt(root.get("itemPrice"), 1000));
// cr.add(Restrictions.gt("itemPrice", 1000));
Query<Item> query = session.createQuery(cr);
final List<Item> greaterThanItemsList = query.getResultList();
final String greaterThanItems[] = new String[greaterThanItemsList.size()];
for (int i = 0; i < greaterThanItemsList.size(); i++) {
greaterThanItems[i] = greaterThanItemsList.get(i)
.getItemName();
}
session.close();
return greaterThanItems;
}
// To get items having price less than 1000
public String[] lessThanCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.lt(root.get("itemPrice"), 1000));
// cr.add(Restrictions.lt("itemPrice", 1000));
Query<Item> query = session.createQuery(cr);
final List<Item> lessThanItemsList = query.getResultList();
final String lessThanItems[] = new String[lessThanItemsList.size()];
for (int i = 0; i < lessThanItemsList.size(); i++) {
lessThanItems[i] = lessThanItemsList.get(i)
.getItemName();
}
session.close();
return lessThanItems;
}
// To get items whose Name start with Chair
public String[] likeCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.like(root.get("itemName"), "%chair%"));
// cr.add(Restrictions.like("itemName", "%chair%"));
Query<Item> query = session.createQuery(cr);
final List<Item> likeItemsList = query.getResultList();
final String likeItems[] = new String[likeItemsList.size()];
for (int i = 0; i < likeItemsList.size(); i++) {
likeItems[i] = likeItemsList.get(i)
.getItemName();
}
session.close();
return likeItems;
}
// Case sensitive search
public String[] likeCaseCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.like(cb.lower(root.get("itemName")), "%chair%"));
// cr.add(Restrictions.ilike("itemName", "%Chair%"));
Query<Item> query = session.createQuery(cr);
final List<Item> ilikeItemsList = query.getResultList();
final String ilikeItems[] = new String[ilikeItemsList.size()];
for (int i = 0; i < ilikeItemsList.size(); i++) {
ilikeItems[i] = ilikeItemsList.get(i)
.getItemName();
}
session.close();
return ilikeItems;
}
// To get records having itemPrice in between 100 and 200
public String[] betweenCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.between(root.get("itemPrice"), 100, 200));
// cr.add(Restrictions.between("itemPrice", 100, 200));
Query<Item> query = session.createQuery(cr);
final List<Item> betweenItemsList = query.getResultList();
final String betweenItems[] = new String[betweenItemsList.size()];
for (int i = 0; i < betweenItemsList.size(); i++) {
betweenItems[i] = betweenItemsList.get(i)
.getItemName();
}
session.close();
return betweenItems;
}
// To get records having itemName in 'Skate Board', 'Paint' and 'Glue'
public String[] inCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(root.get("itemName").in("Skate Board", "Paint", "Glue"));
Query<Item> query = session.createQuery(cr);
final List<Item> inItemsList = query.getResultList();
final String inItems[] = new String[inItemsList.size()];
for (int i = 0; i < inItemsList.size(); i++) {
inItems[i] = inItemsList.get(i)
.getItemName();
}
session.close();
return inItems;
}
// To check if the given property is null
public String[] nullCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.isNull(root.get("itemDescription")));
// cr.add(Restrictions.isNull("itemDescription"));
Query<Item> query = session.createQuery(cr);
final List<Item> nullItemsList = query.getResultList();
final String nullDescItems[] = new String[nullItemsList.size()];
for (int i = 0; i < nullItemsList.size(); i++) {
nullDescItems[i] = nullItemsList.get(i)
.getItemName();
}
session.close();
return nullDescItems;
}
// To check if the given property is not null
public String[] notNullCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root)
.where(cb.isNotNull(root.get("itemDescription")));
// cr.add(Restrictions.isNotNull("itemDescription"));
Query<Item> query = session.createQuery(cr);
final List<Item> notNullItemsList = query.getResultList();
final String notNullDescItems[] = new String[notNullItemsList.size()];
for (int i = 0; i < notNullItemsList.size(); i++) {
notNullDescItems[i] = notNullItemsList.get(i)
.getItemName();
}
session.close();
return notNullDescItems;
}
// Adding more than one expression in one cr
public String[] twoCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
Predicate[] predicates = new Predicate[2];
predicates[0] = cb.isNull(root.get("itemDescription"));
predicates[1] = cb.like(root.get("itemName"), "chair%");
cr.select(root)
.where(predicates);
// cr.add(Restrictions.isNull("itemDescription"));
// cr.add(Restrictions.like("itemName", "chair%"));
Query<Item> query = session.createQuery(cr);
final List<Item> notNullItemsList = query.getResultList();
final String notNullDescItems[] = new String[notNullItemsList.size()];
for (int i = 0; i < notNullItemsList.size(); i++) {
notNullDescItems[i] = notNullItemsList.get(i)
.getItemName();
}
session.close();
return notNullDescItems;
}
// To get items matching with the above defined conditions joined
// with Logical AND
public String[] andLogicalCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
Predicate greaterThanPrice = cb.gt(root.get("itemPrice"), 1000);
Predicate chairItems = cb.like(root.get("itemName"), "Chair%");
cr.select(root)
.where(cb.and(greaterThanPrice, chairItems));
// final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000);
// final Criterion chairItems = Restrictions.like("itemName", "Chair%");
// final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems);
// cr.add(andExample);
Query<Item> query = session.createQuery(cr);
final List<Item> andItemsList = query.getResultList();
final String andItems[] = new String[andItemsList.size()];
for (int i = 0; i < andItemsList.size(); i++) {
andItems[i] = andItemsList.get(i)
.getItemName();
}
session.close();
return andItems;
}
// To get items matching with the above defined conditions joined
// with Logical OR
public String[] orLogicalCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
Predicate greaterThanPrice = cb.gt(root.get("itemPrice"), 1000);
Predicate chairItems = cb.like(root.get("itemName"), "Chair%");
cr.select(root)
.where(cb.or(greaterThanPrice, chairItems));
Query<Item> query = session.createQuery(cr);
final List<Item> orItemsList = query.getResultList();
final String orItems[] = new String[orItemsList.size()];
for (int i = 0; i < orItemsList.size(); i++) {
orItems[i] = orItemsList.get(i)
.getItemName();
}
session.close();
return orItems;
}
// Sorting example
public String[] sortingCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Item> cr = cb.createQuery(Item.class);
final Root<Item> root = cr.from(Item.class);
cr.select(root);
cr.orderBy(cb.asc(root.get("itemName")), cb.desc(root.get("itemPrice")));
// cr.addOrder(Order.asc("itemName"));
// cr.addOrder(Order.desc("itemPrice")).list();
Query<Item> query = session.createQuery(cr);
final List<Item> sortedItemsList = query.getResultList();
final String sortedItems[] = new String[sortedItemsList.size()];
for (int i = 0; i < sortedItemsList.size(); i++) {
sortedItems[i] = sortedItemsList.get(i)
.getItemName();
}
session.close();
return sortedItems;
}
// Set projections Row Count
public Long[] projectionRowCount() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Long> cr = cb.createQuery(Long.class);
final Root<Item> root = cr.from(Item.class);
cr.select(cb.count(root));
Query<Long> query = session.createQuery(cr);
final List<Long> itemProjected = query.getResultList();
// session.createCriteria(Item.class).setProjection(Projections.rowCount()).list();
final Long projectedRowCount[] = new Long[itemProjected.size()];
for (int i = 0; i < itemProjected.size(); i++) {
projectedRowCount[i] = itemProjected.get(i);
}
session.close();
return projectedRowCount;
}
// Set projections average of itemPrice
public Double[] projectionAverage() {
final Session session = HibernateUtil.getHibernateSession();
final CriteriaBuilder cb = session.getCriteriaBuilder();
final CriteriaQuery<Double> cr = cb.createQuery(Double.class);
final Root<Item> root = cr.from(Item.class);
cr.select(cb.avg(root.get("itemPrice")));
Query<Double> query = session.createQuery(cr);
final List avgItemPriceList = query.getResultList();
// session.createCriteria(Item.class).setProjection(Projections.projectionList().add(Projections.avg("itemPrice"))).list();
final Double avgItemPrice[] = new Double[avgItemPriceList.size()];
for (int i = 0; i < avgItemPriceList.size(); i++) {
avgItemPrice[i] = (Double) avgItemPriceList.get(i);
}
session.close();
return avgItemPrice;
}
}

View File

@@ -1,31 +0,0 @@
insert into item (item_id, item_name, item_desc, item_price)
values(1,'item One', 'test 1', 35.12);
insert into item (item_id, item_name, item_desc, item_price)
values(2,'Pogo stick', 'Pogo stick', 466.12);
insert into item (item_id, item_name, item_desc, item_price)
values(3,'Raft', 'Raft', 345.12);
insert into item (item_id, item_name, item_desc, item_price)
values(4,'Skate Board', 'Skating', 135.71);
insert into item (item_id, item_name, item_desc, item_price)
values(5,'Umbrella', 'Umbrella for Rain', 619.25);
insert into item (item_id, item_name, item_desc, item_price)
values(6,'Glue', 'Glue for home', 432.73);
insert into item (item_id, item_name, item_desc, item_price)
values(7,'Paint', 'Paint for Room', 1311.40);
insert into item (item_id, item_name, item_desc, item_price)
values(8,'Red paint', 'Red paint for room', 1135.71);
insert into item (item_id, item_name, item_desc, item_price)
values(9,'Household Chairs', 'Chairs for house', 25.71);
insert into item (item_id, item_name, item_desc, item_price)
values(10,'Office Chairs', 'Chairs for office', 395.98);
insert into item (item_id, item_name, item_desc, item_price)
values(11,'Outdoor Chairs', 'Chairs for outdoor activities', 1234.36);

View File

@@ -1,250 +0,0 @@
package com.baeldung.hibernate.criteria;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Ignore;
import org.junit.Test;
import com.baeldung.hibernate.criteria.model.Item;
import com.baeldung.hibernate.criteria.util.HibernateUtil;
import com.baeldung.hibernate.criteria.view.ApplicationView;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.criteria.Root;
public class HibernateCriteriaIntegrationTest {
final private ApplicationView av = new ApplicationView();
@Test
@Ignore
public void testPerformanceOfCriteria() {
assertFalse(av.checkIfCriteriaTimeLower());
}
@Test
public void testLikeCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedLikeList = session.createQuery("From Item where itemName like '%chair%'").list();
final String expectedLikeItems[] = new String[expectedLikeList.size()];
for (int i = 0; i < expectedLikeList.size(); i++) {
expectedLikeItems[i] = expectedLikeList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedLikeItems, av.likeCriteria());
}
@Test
public void testILikeCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedChairCaseList = session.createQuery("From Item where itemName like '%Chair%'").list();
final String expectedChairCaseItems[] = new String[expectedChairCaseList.size()];
for (int i = 0; i < expectedChairCaseList.size(); i++) {
expectedChairCaseItems[i] = expectedChairCaseList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedChairCaseItems, av.likeCaseCriteria());
}
@Test
public void testNullCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedIsNullDescItemsList = session.createQuery("From Item where itemDescription is null").list();
final String expectedIsNullDescItems[] = new String[expectedIsNullDescItemsList.size()];
for (int i = 0; i < expectedIsNullDescItemsList.size(); i++) {
expectedIsNullDescItems[i] = expectedIsNullDescItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedIsNullDescItems, av.nullCriteria());
}
@Test
public void testIsNotNullCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedIsNotNullDescItemsList = session.createQuery("From Item where itemDescription is not null").list();
final String expectedIsNotNullDescItems[] = new String[expectedIsNotNullDescItemsList.size()];
for (int i = 0; i < expectedIsNotNullDescItemsList.size(); i++) {
expectedIsNotNullDescItems[i] = expectedIsNotNullDescItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedIsNotNullDescItems, av.notNullCriteria());
}
@Test
public void testAverageProjection() {
final Session session = HibernateUtil.getHibernateSession();
final List<Double> expectedAvgProjItemsList = session.createQuery("Select avg(itemPrice) from Item item").list();
final Double expectedAvgProjItems[] = new Double[expectedAvgProjItemsList.size()];
for (int i = 0; i < expectedAvgProjItemsList.size(); i++) {
expectedAvgProjItems[i] = expectedAvgProjItemsList.get(i);
}
session.close();
assertArrayEquals(expectedAvgProjItems, av.projectionAverage());
}
@Test
public void testRowCountProjection() {
final Session session = HibernateUtil.getHibernateSession();
final List<Long> expectedCountProjItemsList = session.createQuery("Select count(*) from Item").list();
final Long expectedCountProjItems[] = new Long[expectedCountProjItemsList.size()];
for (int i = 0; i < expectedCountProjItemsList.size(); i++) {
expectedCountProjItems[i] = expectedCountProjItemsList.get(i);
}
session.close();
assertArrayEquals(expectedCountProjItems, av.projectionRowCount());
}
@Test
public void testOrCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedOrCritItemsList = session.createQuery("From Item where itemPrice>1000 or itemName like 'Chair%'").list();
final String expectedOrCritItems[] = new String[expectedOrCritItemsList.size()];
for (int i = 0; i < expectedOrCritItemsList.size(); i++) {
expectedOrCritItems[i] = expectedOrCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedOrCritItems, av.orLogicalCriteria());
}
@Test
public void testAndCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedAndCritItemsList = session.createQuery("From Item where itemPrice>1000 and itemName like 'Chair%'").list();
final String expectedAndCritItems[] = new String[expectedAndCritItemsList.size()];
for (int i = 0; i < expectedAndCritItemsList.size(); i++) {
expectedAndCritItems[i] = expectedAndCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedAndCritItems, av.andLogicalCriteria());
}
@Test
public void testMultiCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedMultiCritItemsList = session.createQuery("From Item where itemDescription is null and itemName like'chair%'").list();
final String expectedMultiCritItems[] = new String[expectedMultiCritItemsList.size()];
for (int i = 0; i < expectedMultiCritItemsList.size(); i++) {
expectedMultiCritItems[i] = expectedMultiCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedMultiCritItems, av.twoCriteria());
}
@Test
public void testSortCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedSortCritItemsList = session.createQuery("From Item order by itemName asc, itemPrice desc").list();
final String expectedSortCritItems[] = new String[expectedSortCritItemsList.size()];
for (int i = 0; i < expectedSortCritItemsList.size(); i++) {
expectedSortCritItems[i] = expectedSortCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedSortCritItems, av.sortingCriteria());
}
@Test
public void testGreaterThanCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedGreaterThanList = session.createQuery("From Item where itemPrice>1000").list();
final String expectedGreaterThanItems[] = new String[expectedGreaterThanList.size()];
for (int i = 0; i < expectedGreaterThanList.size(); i++) {
expectedGreaterThanItems[i] = expectedGreaterThanList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedGreaterThanItems, av.greaterThanCriteria());
}
@Test
public void testLessThanCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedLessList = session.createQuery("From Item where itemPrice<1000").list();
final String expectedLessThanItems[] = new String[expectedLessList.size()];
for (int i = 0; i < expectedLessList.size(); i++) {
expectedLessThanItems[i] = expectedLessList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedLessThanItems, av.lessThanCriteria());
}
@Test
public void betweenCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedBetweenList = session.createQuery("From Item where itemPrice between 100 and 200").list();
final String expectedPriceBetweenItems[] = new String[expectedBetweenList.size()];
for (int i = 0; i < expectedBetweenList.size(); i++) {
expectedPriceBetweenItems[i] = expectedBetweenList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedPriceBetweenItems, av.betweenCriteria());
}
@Test
public void inCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedInList = session.createQuery("From Item where itemName in ('Skate Board', 'Paint', 'Glue')").list();
final String expectedNameInItems[] = new String[expectedInList.size()];
for (int i = 0; i < expectedInList.size(); i++) {
expectedNameInItems[i] = expectedInList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedNameInItems, av.inCriteria());
}
@Test
public void givenNewItemPrice_whenCriteriaUpdate_thenReturnAffectedResult() {
int oldPrice = 10, newPrice = 20;
Session session = HibernateUtil.getHibernateSession();
Item item = new Item(12, "Test Item 12", "This is a description");
item.setItemPrice(oldPrice);
session.save(item);
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaUpdate<Item> criteriaUpdate = cb.createCriteriaUpdate(Item.class);
Root<Item> root = criteriaUpdate.from(Item.class);
criteriaUpdate.set("itemPrice", newPrice);
criteriaUpdate.where(cb.equal(root.get("itemPrice"), oldPrice));
Transaction transaction = session.beginTransaction();
session.createQuery(criteriaUpdate).executeUpdate();
transaction.commit();
Item updatedItem = session.createQuery("FROM Item WHERE itemPrice = " + newPrice, Item.class).getSingleResult();
session.refresh(updatedItem);
assertEquals(newPrice, updatedItem.getItemPrice().intValue());
}
@Test
public void givenTargetItemPrice_whenCriteriaDelete_thenDeleteMatched() {
int targetPrice = 1000;
Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaDelete<Item> criteriaDelete = cb.createCriteriaDelete(Item.class);
Root<Item> root = criteriaDelete.from(Item.class);
criteriaDelete.where(cb.greaterThan(root.get("itemPrice"), targetPrice));
Transaction transaction = session.beginTransaction();
session.createQuery(criteriaDelete).executeUpdate();
transaction.commit();
List<Item> deletedItem = session.createQuery("FROM Item WHERE itemPrice > " + targetPrice, Item.class).list();
assertTrue(deletedItem.isEmpty());
}
}

View File

@@ -1,15 +0,0 @@
package com.baeldung.hibernate.criteria;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class HibernateCriteriaTestRunner {
public static void main(final String[] args) {
Result result = JUnitCore.runClasses(HibernateCriteriaTestSuite.class);
for (Failure failure : result.getFailures()) {
}
}
}

View File

@@ -1,11 +0,0 @@
package com.baeldung.hibernate.criteria;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({ HibernateCriteriaIntegrationTest.class })
public class HibernateCriteriaTestSuite {
}

View File

@@ -1,22 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.baeldung.hibernate.criteria.model.Item" table="ITEM">
<id name="itemId" type="java.lang.Integer">
<column name="ITEM_ID" />
<generator class="identity" />
</id>
<property name="itemDescription" type="string">
<column name="ITEM_DESC" length="100" />
</property>
<property name="itemPrice" type="java.lang.Integer">
<column name="ITEM_PRICE" not-null="true" />
</property>
<property name="itemName" type="string">
<column name="ITEM_NAME" not-null="true" />
</property>
</class>
</hibernate-mapping>

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.hbm2ddl.import_files">import-db.sql</property>
<property name="show_sql">false</property>
<mapping resource="com/baeldung/hibernate/criteria/model/Item.hbm.xml" />
</session-factory>
</hibernate-configuration>

View File

@@ -1,22 +0,0 @@
insert into item (item_id, item_name, item_desc, item_price) values(1,'item One', 'test 1', 35.12);
insert into item (item_id, item_name, item_desc, item_price) values(2,'Pogo stick', 'Pogo stick', 466.12);
insert into item (item_id, item_name, item_desc, item_price) values(3,'Raft', 'Raft', 345.12);
insert into item (item_id, item_name, item_desc, item_price) values(4,'Skate Board', 'Skating', 135.71);
insert into item (item_id, item_name, item_desc, item_price) values(5,'Umbrella', 'Umbrella for Rain', 619.25);
insert into item (item_id, item_name, item_desc, item_price) values(6,'Glue', 'Glue for home', 432.73);
insert into item (item_id, item_name, item_desc, item_price) values(7,'Paint', 'Paint for Room', 1311.40);
insert into item (item_id, item_name, item_desc, item_price) values(8,'Red paint', 'Red paint for room', 1135.71);
insert into item (item_id, item_name, item_desc, item_price) values(9,'Household Chairs', 'Chairs for house', 25.71);
insert into item (item_id, item_name, item_desc, item_price) values(10,'Office Chairs', 'Chairs for office', 395.98);
insert into item (item_id, item_name, item_desc, item_price) values(11,'Outdoor Chairs', 'Chairs for outdoor activities', 1234.36);