Hibernate Criteria Query (#592)
* BAEL-212 Contains: 1. Hibernate Criteria Query Classes 2. Hibernate Criteria Query Test * Updating the config file and the HibernateUtil class * Hibernate Criteria Queries Example * Hibernate Fetching : Eager Loading vs Lazy Loading * Hibernate Criteria Query files
This commit is contained in:
parent
31d9e1bef6
commit
ee0e14e590
@ -0,0 +1,22 @@
|
|||||||
|
<?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>
|
@ -0,0 +1,81 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,253 @@
|
|||||||
|
/**
|
||||||
|
* 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 org.hibernate.Criteria;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.Transaction;
|
||||||
|
import org.hibernate.criterion.Criterion;
|
||||||
|
import org.hibernate.criterion.LogicalExpression;
|
||||||
|
import org.hibernate.criterion.Order;
|
||||||
|
import org.hibernate.criterion.Projections;
|
||||||
|
import org.hibernate.criterion.Restrictions;
|
||||||
|
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
Transaction tx = null;
|
||||||
|
|
||||||
|
// calculate the time taken by criteria
|
||||||
|
final long startTimeCriteria = System.nanoTime();
|
||||||
|
cr.add(Restrictions.like("itemName", "%item One%"));
|
||||||
|
final List results = cr.list();
|
||||||
|
final long endTimeCriteria = System.nanoTime();
|
||||||
|
final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000;
|
||||||
|
|
||||||
|
// calculate the time taken by HQL
|
||||||
|
final long startTimeHQL = System.nanoTime();
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
final List 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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.gt("itemPrice", 1000));
|
||||||
|
final List<Item> greaterThanItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.lt("itemPrice", 1000));
|
||||||
|
final List<Item> lessThanItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.like("itemName", "%chair%"));
|
||||||
|
final List<Item> likeItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.ilike("itemName", "%Chair%"));
|
||||||
|
final List<Item> ilikeItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
// To get items having price more than 1000
|
||||||
|
cr.add(Restrictions.between("itemPrice", 100, 200));
|
||||||
|
final List<Item> betweenItemsList = cr.list();
|
||||||
|
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 check if the given property is null
|
||||||
|
public String[] nullCriteria() {
|
||||||
|
final Session session = HibernateUtil.getHibernateSession();
|
||||||
|
final Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.isNull("itemDescription"));
|
||||||
|
final List<Item> nullItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.isNotNull("itemDescription"));
|
||||||
|
final List<Item> notNullItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.add(Restrictions.isNull("itemDescription"));
|
||||||
|
cr.add(Restrictions.like("itemName", "chair%"));
|
||||||
|
final List<Item> notNullItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000);
|
||||||
|
final Criterion chairItems = Restrictions.like("itemName", "Chair%");
|
||||||
|
final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems);
|
||||||
|
cr.add(andExample);
|
||||||
|
final List<Item> andItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000);
|
||||||
|
final Criterion chairItems = Restrictions.like("itemName", "Chair%");
|
||||||
|
final LogicalExpression orExample = Restrictions.or(greaterThanPrice, chairItems);
|
||||||
|
cr.add(orExample);
|
||||||
|
final List<Item> orItemsList = cr.list();
|
||||||
|
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 Criteria cr = session.createCriteria(Item.class);
|
||||||
|
cr.addOrder(Order.asc("itemName"));
|
||||||
|
cr.addOrder(Order.desc("itemPrice")).list();
|
||||||
|
final List<Item> sortedItemsList = cr.list();
|
||||||
|
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 List<Long> itemProjected = 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 List avgItemPriceList = 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping>
|
||||||
|
<class name="com.baeldung.hibernate.fetching.model.OrderDetail" table="USER_ORDER">
|
||||||
|
|
||||||
|
<id name="orderId" type="java.lang.Long" column="ORDER_ID" >
|
||||||
|
<generator class="native" />
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="orderDate" type="date">
|
||||||
|
<column name="ORDER_DATE" />
|
||||||
|
</property>
|
||||||
|
<property name="orderDesc" type="string">
|
||||||
|
<column name="ORDER_DESC" not-null="true" />
|
||||||
|
</property>
|
||||||
|
|
||||||
|
|
||||||
|
<many-to-one name="user" class="com.baeldung.hibernate.fetching.model.User" fetch="select">
|
||||||
|
<column name="user_id" not-null="true" />
|
||||||
|
</many-to-one>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
</hibernate-mapping>
|
@ -0,0 +1,73 @@
|
|||||||
|
package com.baeldung.hibernate.fetching.model;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.sql.Date;
|
||||||
|
|
||||||
|
public class OrderDetail implements Serializable{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private Long orderId;
|
||||||
|
private Date orderDate;
|
||||||
|
private String orderDesc;
|
||||||
|
private User user;
|
||||||
|
|
||||||
|
public OrderDetail(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrderDetail(Date orderDate, String orderDesc) {
|
||||||
|
super();
|
||||||
|
this.orderDate = orderDate;
|
||||||
|
this.orderDesc = orderDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getOrderDate() {
|
||||||
|
return orderDate;
|
||||||
|
}
|
||||||
|
public void setOrderDate(Date orderDate) {
|
||||||
|
this.orderDate = orderDate;
|
||||||
|
}
|
||||||
|
public String getOrderDesc() {
|
||||||
|
return orderDesc;
|
||||||
|
}
|
||||||
|
public void setOrderDesc(String orderDesc) {
|
||||||
|
this.orderDesc = orderDesc;
|
||||||
|
}
|
||||||
|
public User getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
public void setUser(User user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((orderId == null) ? 0 : orderId.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
OrderDetail other = (OrderDetail) obj;
|
||||||
|
if (orderId == null) {
|
||||||
|
if (other.orderId != null)
|
||||||
|
return false;
|
||||||
|
} else if (!orderId.equals(other.orderId))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public Long getOrderId() {
|
||||||
|
return orderId;
|
||||||
|
}
|
||||||
|
public void setOrderId(Long orderId) {
|
||||||
|
this.orderId = orderId;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||||
|
<hibernate-mapping>
|
||||||
|
<class name="com.baeldung.hibernate.fetching.model.User" table="USER">
|
||||||
|
<id name="userId" type="long" unsaved-value="null">
|
||||||
|
<column name="USER_ID" />
|
||||||
|
<generator class="native" />
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="userName" type="string">
|
||||||
|
<column name="USERNAME" length="100" />
|
||||||
|
</property>
|
||||||
|
<property name="firstName" type="string">
|
||||||
|
<column name="FIRST_NAME" not-null="true" />
|
||||||
|
</property>
|
||||||
|
<property name="lastName" type="string">
|
||||||
|
<column name="LAST_NAME" not-null="true" />
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<set name="orderDetail" table="USER_ORDER"
|
||||||
|
inverse="true" lazy="false" fetch="select">
|
||||||
|
<key>
|
||||||
|
<column name="USER_ID" not-null="true" />
|
||||||
|
</key>
|
||||||
|
<one-to-many class="com.baeldung.hibernate.fetching.model.OrderDetail" />
|
||||||
|
</set>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
</hibernate-mapping>
|
@ -0,0 +1,96 @@
|
|||||||
|
package com.baeldung.hibernate.fetching.model;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class User implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private Long userId;
|
||||||
|
private String userName;
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
private Set<OrderDetail> orderDetail = new HashSet<OrderDetail>();
|
||||||
|
|
||||||
|
public User() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public User(final Long userId, final String userName, final String firstName, final String lastName) {
|
||||||
|
super();
|
||||||
|
this.userId = userId;
|
||||||
|
this.userName = userName;
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((userId == null) ? 0 : userId.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 User other = (User) obj;
|
||||||
|
if (userId == null) {
|
||||||
|
if (other.userId != null)
|
||||||
|
return false;
|
||||||
|
} else if (!userId.equals(other.userId))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(final Long userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserName(final String userName) {
|
||||||
|
this.userName = userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstName(final String firstName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastName(final String lastName) {
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<OrderDetail> getOrderDetail() {
|
||||||
|
return orderDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderDetail(Set<OrderDetail> orderDetail) {
|
||||||
|
this.orderDetail = orderDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||||
|
<hibernate-mapping>
|
||||||
|
<class name="com.baeldung.hibernate.fetching.model.User" table="USER">
|
||||||
|
<id name="userId" type="long" unsaved-value="null">
|
||||||
|
<column name="USER_ID" />
|
||||||
|
<generator class="native" />
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="userName" type="string">
|
||||||
|
<column name="USERNAME" length="100" />
|
||||||
|
</property>
|
||||||
|
<property name="firstName" type="string">
|
||||||
|
<column name="FIRST_NAME" not-null="true" />
|
||||||
|
</property>
|
||||||
|
<property name="lastName" type="string">
|
||||||
|
<column name="LAST_NAME" not-null="true" />
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<set name="orderDetail" table="USER_ORDER"
|
||||||
|
inverse="true" lazy="true" fetch="select">
|
||||||
|
<key>
|
||||||
|
<column name="USER_ID" not-null="true" />
|
||||||
|
</key>
|
||||||
|
<one-to-many class="com.baeldung.hibernate.fetching.model.OrderDetail" />
|
||||||
|
</set>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
</hibernate-mapping>
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.baeldung.hibernate.fetching.util;
|
||||||
|
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
|
||||||
|
public class HibernateUtil {
|
||||||
|
private static SessionFactory factory;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static Session getHibernateSession(String fetchMethod) {
|
||||||
|
//two config files are there
|
||||||
|
//one with lazy loading enabled
|
||||||
|
//another lazy = false
|
||||||
|
SessionFactory sf = null;
|
||||||
|
if ("lazy".equals(fetchMethod)) {
|
||||||
|
sf = new Configuration().configure("fetchingLazy.cfg.xml").buildSessionFactory();
|
||||||
|
} else {
|
||||||
|
|
||||||
|
sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory();
|
||||||
|
}
|
||||||
|
// fetching.cfg.xml is used for this example
|
||||||
|
final Session session = sf.openSession();
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Session getHibernateSession() {
|
||||||
|
System.out.println("Loading eager");
|
||||||
|
SessionFactory sf = null;
|
||||||
|
sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory();
|
||||||
|
final Session session = sf.openSession();
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,115 @@
|
|||||||
|
package com.baeldung.hibernate.fetching.view;
|
||||||
|
|
||||||
|
import java.sql.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.hibernate.Hibernate;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.Transaction;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.fetching.util.HibernateUtil;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.fetching.model.OrderDetail;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.fetching.model.User;
|
||||||
|
|
||||||
|
|
||||||
|
public class FetchingAppView {
|
||||||
|
|
||||||
|
public FetchingAppView(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//lazily loaded
|
||||||
|
public boolean lazyLoaded(){
|
||||||
|
final Session sessionLazy = HibernateUtil.getHibernateSession("lazy");
|
||||||
|
List<User> users = sessionLazy.createQuery("From User").list();
|
||||||
|
User userLazyLoaded = new User();
|
||||||
|
userLazyLoaded = users.get(3);
|
||||||
|
//since data is lazyloaded so data won't be initialized
|
||||||
|
Set<OrderDetail> orderDetailSet = userLazyLoaded.getOrderDetail();
|
||||||
|
return (Hibernate.isInitialized(orderDetailSet));
|
||||||
|
}
|
||||||
|
|
||||||
|
//eagerly loaded
|
||||||
|
public boolean eagerLoaded(){
|
||||||
|
final Session sessionEager = HibernateUtil.getHibernateSession();
|
||||||
|
//data should be loaded in the following line
|
||||||
|
//also note the queries generated
|
||||||
|
List<User> users =sessionEager.createQuery("From User").list();
|
||||||
|
User userEagerLoaded = new User();
|
||||||
|
userEagerLoaded = users.get(3);
|
||||||
|
Set<OrderDetail> orderDetailSet = userEagerLoaded.getOrderDetail();
|
||||||
|
return (Hibernate.isInitialized(orderDetailSet));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//creates test data
|
||||||
|
//call this method to create the data in the database
|
||||||
|
public void createTestData() {
|
||||||
|
|
||||||
|
final Session session = HibernateUtil.getHibernateSession();
|
||||||
|
|
||||||
|
Transaction tx = null;
|
||||||
|
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
final User user1 = new User();
|
||||||
|
final User user2 = new User();
|
||||||
|
final User user3 = new User();
|
||||||
|
|
||||||
|
user1.setFirstName("Priyam");
|
||||||
|
user1.setLastName("Banerjee");
|
||||||
|
user1.setUserName("priyambanerjee");
|
||||||
|
session.save(user1);
|
||||||
|
|
||||||
|
user2.setFirstName("Navneeta");
|
||||||
|
user2.setLastName("Mukherjee");
|
||||||
|
user2.setUserName("nmukh");
|
||||||
|
session.save(user2);
|
||||||
|
|
||||||
|
user3.setFirstName("Molly");
|
||||||
|
user3.setLastName("Banerjee");
|
||||||
|
user3.setUserName("mollyb");
|
||||||
|
session.save(user3);
|
||||||
|
|
||||||
|
final OrderDetail order1 = new OrderDetail();
|
||||||
|
final OrderDetail order2 = new OrderDetail();
|
||||||
|
final OrderDetail order3 = new OrderDetail();
|
||||||
|
final OrderDetail order4 = new OrderDetail();
|
||||||
|
final OrderDetail order5 = new OrderDetail();
|
||||||
|
|
||||||
|
order1.setOrderDesc("First Order");
|
||||||
|
order1.setOrderDate(new Date(2014, 10, 12));
|
||||||
|
order1.setUser(user1);
|
||||||
|
|
||||||
|
order2.setOrderDesc("Second Order");
|
||||||
|
order2.setOrderDate(new Date(2016, 10, 25));
|
||||||
|
order2.setUser(user1);
|
||||||
|
|
||||||
|
order3.setOrderDesc("Third Order");
|
||||||
|
order3.setOrderDate(new Date(2015, 2, 17));
|
||||||
|
order3.setUser(user2);
|
||||||
|
|
||||||
|
order4.setOrderDesc("Fourth Order");
|
||||||
|
order4.setOrderDate(new Date(2014, 10, 1));
|
||||||
|
order4.setUser(user2);
|
||||||
|
|
||||||
|
order5.setOrderDesc("Fifth Order");
|
||||||
|
order5.setOrderDate(new Date(2014, 9, 11));
|
||||||
|
order5.setUser(user3);
|
||||||
|
|
||||||
|
|
||||||
|
session.saveOrUpdate(order1);
|
||||||
|
session.saveOrUpdate(order2);
|
||||||
|
session.saveOrUpdate(order3);
|
||||||
|
session.saveOrUpdate(order4);
|
||||||
|
session.saveOrUpdate(order5);
|
||||||
|
|
||||||
|
// session.saveOrUpdate(user1);
|
||||||
|
tx.commit();
|
||||||
|
session.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
17
spring-hibernate4/src/main/resources/criteria.cfg.xml
Normal file
17
spring-hibernate4/src/main/resources/criteria.cfg.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?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">com.mysql.jdbc.Driver</property>
|
||||||
|
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
|
||||||
|
<property name="hibernate.connection.username">root</property>
|
||||||
|
<property name="hibernate.connection.password">iamtheking</property>
|
||||||
|
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
|
||||||
|
<property name="show_sql">true</property>
|
||||||
|
<mapping resource="com/baeldung/hibernate/criteria/model/Item.hbm.xml" />
|
||||||
|
</session-factory>
|
||||||
|
</hibernate-configuration>
|
@ -0,0 +1,7 @@
|
|||||||
|
CREATE TABLE `item` (
|
||||||
|
`ITEM_ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ITEM_DESC` varchar(100) DEFAULT NULL,
|
||||||
|
`ITEM_PRICE` int(11) NOT NULL,
|
||||||
|
`ITEM_NAME` varchar(255) NOT NULL,
|
||||||
|
PRIMARY KEY (`ITEM_ID`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
|
16
spring-hibernate4/src/main/resources/fetching.cfg.xml
Normal file
16
spring-hibernate4/src/main/resources/fetching.cfg.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?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">com.mysql.jdbc.Driver</property>
|
||||||
|
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
|
||||||
|
<property name="hibernate.connection.username">root</property>
|
||||||
|
<property name="hibernate.connection.password">iamtheking</property>
|
||||||
|
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
|
||||||
|
<mapping resource="com/baeldung/hibernate/fetching/model/User.hbm.xml" />
|
||||||
|
<mapping resource="com/baeldung/hibernate/fetching/model/OrderDetail.hbm.xml" />
|
||||||
|
</session-factory>
|
||||||
|
</hibernate-configuration>
|
16
spring-hibernate4/src/main/resources/fetchingLazy.cfg.xml
Normal file
16
spring-hibernate4/src/main/resources/fetchingLazy.cfg.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?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">com.mysql.jdbc.Driver</property>
|
||||||
|
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
|
||||||
|
<property name="hibernate.connection.username">root</property>
|
||||||
|
<property name="hibernate.connection.password">iamtheking</property>
|
||||||
|
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
|
||||||
|
<mapping resource="com/baeldung/hibernate/fetching/model/OrderDetail.hbm.xml" />
|
||||||
|
<mapping resource="com/baeldung/hibernate/fetching/model/UserLazy.hbm.xml" />
|
||||||
|
</session-factory>
|
||||||
|
</hibernate-configuration>
|
@ -0,0 +1,19 @@
|
|||||||
|
CREATE TABLE `user` (
|
||||||
|
`user_id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`USERNAME` varchar(100) DEFAULT NULL,
|
||||||
|
`FIRST_NAME` varchar(255) NOT NULL,
|
||||||
|
`LAST_NAME` varchar(255) NOT NULL,
|
||||||
|
PRIMARY KEY (`user_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 ;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE `user_order` (
|
||||||
|
`ORDER_ID` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ORDER_DATE` date DEFAULT NULL,
|
||||||
|
`USER_ID` int(10) NOT NULL DEFAULT '0',
|
||||||
|
`ORDER_DESC` varchar(1024) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`ORDER_ID`,`USER_ID`),
|
||||||
|
KEY `USER_ID` (`USER_ID`),
|
||||||
|
CONSTRAINT `user_order_ibfk_1` FOREIGN KEY (`USER_ID`) REFERENCES `USER` (`user_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
|
||||||
|
|
31
spring-hibernate4/src/main/resources/insert_statements.sql
Normal file
31
spring-hibernate4/src/main/resources/insert_statements.sql
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
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);
|
@ -0,0 +1,191 @@
|
|||||||
|
package com.baeldung.hibernate.criteria;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.Session;
|
||||||
|
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;
|
||||||
|
|
||||||
|
public class HibernateCriteriaTest {
|
||||||
|
|
||||||
|
final private ApplicationView av = new ApplicationView();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPerformanceOfCriteria() {
|
||||||
|
assertTrue(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());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
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()) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baeldung.hibernate.criteria;
|
||||||
|
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.Suite;
|
||||||
|
|
||||||
|
@RunWith(Suite.class)
|
||||||
|
@Suite.SuiteClasses({ HibernateCriteriaTest.class })
|
||||||
|
|
||||||
|
public class HibernateCriteriaTestSuite {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.baeldung.hibernate.fetching;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.fetching.view.FetchingAppView;
|
||||||
|
|
||||||
|
public class HibernateFetchingTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLazyFetching() {
|
||||||
|
FetchingAppView fav = new FetchingAppView();
|
||||||
|
fav.createTestData();
|
||||||
|
assertFalse(fav.lazyLoaded());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEagerFetching() {
|
||||||
|
FetchingAppView fav = new FetchingAppView();
|
||||||
|
assertTrue(fav.eagerLoaded());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.baeldung.hibernate.fetching;
|
||||||
|
|
||||||
|
import org.junit.runner.JUnitCore;
|
||||||
|
import org.junit.runner.Result;
|
||||||
|
import org.junit.runner.notification.Failure;
|
||||||
|
|
||||||
|
public class HibernateFetchingTestRunner {
|
||||||
|
|
||||||
|
public static void main(final String[] args) {
|
||||||
|
|
||||||
|
Result result = JUnitCore.runClasses(HibernateFetchingTestSuite.class);
|
||||||
|
for (Failure failure : result.getFailures()) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.baeldung.hibernate.fetching;
|
||||||
|
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.Suite;
|
||||||
|
|
||||||
|
|
||||||
|
@RunWith(Suite.class)
|
||||||
|
@Suite.SuiteClasses({ HibernateFetchingTest.class })
|
||||||
|
public class HibernateFetchingTestSuite {
|
||||||
|
|
||||||
|
}
|
16
spring-hibernate4/src/test/java/criteria.cfg.xml
Normal file
16
spring-hibernate4/src/test/java/criteria.cfg.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?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">com.mysql.jdbc.Driver</property>
|
||||||
|
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
|
||||||
|
<property name="hibernate.connection.username">root</property>
|
||||||
|
<property name="hibernate.connection.password">iamtheking</property>
|
||||||
|
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
|
||||||
|
<property name="show_sql">true</property>
|
||||||
|
<mapping resource="com/baeldung/hibernate/criteria/model/Item.hbm.xml" />
|
||||||
|
</session-factory>
|
||||||
|
</hibernate-configuration>
|
@ -1,36 +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>
|
|
||||||
<!-- Database connection settings -->
|
|
||||||
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
|
|
||||||
<property name="connection.url">jdbc:mysql://localhost:3306/HIBERTEST2_TEST</property>
|
|
||||||
<property name="connection.username">root</property>
|
|
||||||
<property name="connection.password"></property>
|
|
||||||
|
|
||||||
<!-- JDBC connection pool (use the built-in) -->
|
|
||||||
<property name="connection.pool_size">1</property>
|
|
||||||
|
|
||||||
<!-- SQL dialect -->
|
|
||||||
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
|
|
||||||
|
|
||||||
<!-- Enable Hibernate's automatic session context management -->
|
|
||||||
<property name="current_session_context_class">thread</property>
|
|
||||||
|
|
||||||
<!-- Disable the second-level cache -->
|
|
||||||
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
|
|
||||||
|
|
||||||
<!-- Echo all executed SQL to stdout -->
|
|
||||||
<property name="show_sql">true</property>
|
|
||||||
|
|
||||||
<!-- Drop and re-create the database schema on startup -->
|
|
||||||
|
|
||||||
|
|
||||||
</session-factory>
|
|
||||||
|
|
||||||
</hibernate-configuration>
|
|
Loading…
x
Reference in New Issue
Block a user