JAVA-10083 Create new module hibernate-queries from spring-hibernate-5 module
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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()) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
Reference in New Issue
Block a user