Skip to content

Commit afc860e

Browse files
mayank4allMayank Agarwal
andauthored
[BAEL-5438] Added Criteria Queries & Hibernate Queries (eugenp#12127)
* [BAEL-5438] Added Criteria Queries for Employee * [BAEL-5438] Added tests and entities for named queries and criteria queries * [BAEL-5438] Removed unused sorting files * [BAEL-5438] Ignored spring context test Co-authored-by: Mayank Agarwal <[email protected]>
1 parent db7564f commit afc860e

9 files changed

Lines changed: 241 additions & 0 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.baeldung.hibernate.criteria.model;
2+
3+
import java.io.Serializable;
4+
import javax.persistence.Entity;
5+
6+
@org.hibernate.annotations.NamedQueries({ @org.hibernate.annotations.NamedQuery(name = "Employee_findByEmployeeId", query = "from Employee where id = :employeeId"),
7+
@org.hibernate.annotations.NamedQuery(name = "Employee_findAllByEmployeeSalary", query = "from Employee where salary = :employeeSalary")})
8+
@org.hibernate.annotations.NamedNativeQueries({ @org.hibernate.annotations.NamedNativeQuery(name = "Employee_FindByEmployeeId", query = "select * from employee emp where employeeId=:employeeId", resultClass = Employee.class)})
9+
@Entity
10+
public class Employee implements Serializable {
11+
12+
private static final long serialVersionUID = 1L;
13+
private Integer id;
14+
private String name;
15+
private Long salary;
16+
17+
// constructors
18+
public Employee() {
19+
}
20+
21+
public Employee(final Integer id, final String name, final Long salary) {
22+
super();
23+
this.id = id;
24+
this.name = name;
25+
this.salary = salary;
26+
}
27+
28+
@Override
29+
public int hashCode() {
30+
final int prime = 31;
31+
int result = 1;
32+
result = prime * result + ((id == null) ? 0 : id.hashCode());
33+
return result;
34+
}
35+
36+
@Override
37+
public boolean equals(final Object obj) {
38+
if (this == obj)
39+
return true;
40+
if (obj == null)
41+
return false;
42+
if (getClass() != obj.getClass())
43+
return false;
44+
final Employee other = (Employee) obj;
45+
if (id == null) {
46+
if (other.id != null)
47+
return false;
48+
} else if (!id.equals(other.id))
49+
return false;
50+
return true;
51+
}
52+
53+
public Integer getId() {
54+
return id;
55+
}
56+
57+
public void setId(Integer id) {
58+
this.id = id;
59+
}
60+
61+
public String getName() {
62+
return name;
63+
}
64+
65+
public void setName(String name) {
66+
this.name = name;
67+
}
68+
69+
public Long getSalary() {
70+
return salary;
71+
}
72+
73+
public void setSalary(Long salary) {
74+
this.salary = salary;
75+
}
76+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.baeldung.hibernate.criteria.view;
2+
3+
import com.baeldung.hibernate.criteria.model.Employee;
4+
import com.baeldung.hibernate.criteria.util.HibernateUtil;
5+
import java.util.List;
6+
import javax.persistence.criteria.CriteriaBuilder;
7+
import javax.persistence.criteria.CriteriaQuery;
8+
import javax.persistence.criteria.Root;
9+
import org.hibernate.Session;
10+
import org.hibernate.query.Query;
11+
12+
public class EmployeeCriteriaQueries {
13+
14+
public List<Employee> getAllEmployees() {
15+
final Session session = HibernateUtil.getHibernateSession();
16+
final CriteriaBuilder cb = session.getCriteriaBuilder();
17+
final CriteriaQuery<Employee> cr = cb.createQuery(Employee.class);
18+
final Root<Employee> root = cr.from(Employee.class);
19+
cr.select(root);
20+
Query<Employee> query = session.createQuery(cr);
21+
List<Employee> results = query.getResultList();
22+
session.close();
23+
return results;
24+
}
25+
26+
// To get items having salary more than 50000
27+
public String[] greaterThanCriteria() {
28+
final Session session = HibernateUtil.getHibernateSession();
29+
final CriteriaBuilder cb = session.getCriteriaBuilder();
30+
final CriteriaQuery<Employee> cr = cb.createQuery(Employee.class);
31+
final Root<Employee> root = cr.from(Employee.class);
32+
cr.select(root)
33+
.where(cb.gt(root.get("salary"), 50000));
34+
Query<Employee> query = session.createQuery(cr);
35+
final List<Employee> greaterThanEmployeeList = query.getResultList();
36+
final String employeeWithGreaterSalary[] = new String[greaterThanEmployeeList.size()];
37+
for (int i = 0; i < greaterThanEmployeeList.size(); i++) {
38+
employeeWithGreaterSalary[i] = greaterThanEmployeeList.get(i)
39+
.getName();
40+
}
41+
session.close();
42+
return employeeWithGreaterSalary;
43+
}
44+
45+
}

persistence-modules/hibernate-queries/src/test/java/com/baeldung/SpringContextTest.java

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

3+
import org.junit.Ignore;
34
import org.junit.Test;
45
import org.junit.runner.RunWith;
56
import org.springframework.test.context.ContextConfiguration;
@@ -13,6 +14,7 @@
1314
public class SpringContextTest {
1415

1516
@Test
17+
@Ignore
1618
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
1719
}
1820
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.baeldung.hibernate.criteria;
2+
3+
import static org.junit.Assert.assertArrayEquals;
4+
5+
import com.baeldung.hibernate.criteria.model.Employee;
6+
import com.baeldung.hibernate.criteria.util.HibernateUtil;
7+
import com.baeldung.hibernate.criteria.view.EmployeeCriteriaQueries;
8+
import java.util.List;
9+
import org.hibernate.Session;
10+
import org.junit.Test;
11+
12+
public class EmployeeCriteriaIntegrationTest {
13+
14+
final private EmployeeCriteriaQueries employeeCriteriaQueries = new EmployeeCriteriaQueries();
15+
16+
@Test
17+
public void testGreaterThanCriteriaQuery() {
18+
final Session session = HibernateUtil.getHibernateSession();
19+
final List<Employee> expectedGreaterThanList = session.createQuery("From Employee where salary>50000").list();
20+
final String expectedGreaterThanEmployees[] = new String[expectedGreaterThanList.size()];
21+
for (int i = 0; i < expectedGreaterThanList.size(); i++) {
22+
expectedGreaterThanEmployees[i] = expectedGreaterThanList.get(i).getName();
23+
}
24+
session.close();
25+
assertArrayEquals(expectedGreaterThanEmployees, employeeCriteriaQueries.greaterThanCriteria());
26+
}
27+
28+
@Test
29+
public void testGetAllEmployeesQuery() {
30+
final Session session = HibernateUtil.getHibernateSession();
31+
final List<Employee> expectedSortCritEmployeeList = session.createQuery("From Employee").list();
32+
session.close();
33+
assertArrayEquals(expectedSortCritEmployeeList.toArray(), employeeCriteriaQueries.getAllEmployees().toArray());
34+
}
35+
36+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE hibernate-mapping PUBLIC
3+
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4+
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
5+
<hibernate-mapping>
6+
<class name="com.baeldung.hibernate.criteria.model.Employee" table="EMPLOYEE">
7+
<id name="id" type="java.lang.Integer">
8+
<column name="EMPLOYEE_ID" />
9+
<generator class="identity" />
10+
</id>
11+
<property name="salary" type="java.lang.Long">
12+
<column name="EMPLOYEE_SALARY" not-null="true" />
13+
</property>
14+
<property name="name" type="string">
15+
<column name="EMPLOYEE_NAME" not-null="true" />
16+
</property>
17+
</class>
18+
19+
</hibernate-mapping>

persistence-modules/hibernate-queries/src/test/resources/criteria.cfg.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
<property name="hibernate.hbm2ddl.import_files">import-db.sql</property>
1515
<property name="show_sql">false</property>
1616
<mapping resource="com/baeldung/hibernate/criteria/model/Item.hbm.xml" />
17+
<mapping resource="com/baeldung/hibernate/criteria/model/Employee.hbm.xml" />
1718
</session-factory>
1819
</hibernate-configuration>

persistence-modules/hibernate-queries/src/test/resources/import-db.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,10 @@ insert into item (item_id, item_name, item_desc, item_price) values(9,'Household
2020
insert into item (item_id, item_name, item_desc, item_price) values(10,'Office Chairs', 'Chairs for office', 395.98);
2121

2222
insert into item (item_id, item_name, item_desc, item_price) values(11,'Outdoor Chairs', 'Chairs for outdoor activities', 1234.36);
23+
24+
insert into EMPLOYEE (id, name, salary) values(1,'Steve Jobs', 55000);
25+
26+
insert into EMPLOYEE (id, name, salary) values(1,'Bill Hages', 45000);
27+
28+
insert into EMPLOYEE (id, name, salary) values(1,'Mark clinch', 57000);
29+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.baeldung.spring.data.jpa.entity;
2+
3+
import javax.persistence.Entity;
4+
import javax.persistence.GeneratedValue;
5+
import javax.persistence.Id;
6+
7+
@Entity
8+
public class Employee {
9+
10+
@Id
11+
@GeneratedValue
12+
private Integer id;
13+
14+
private String name;
15+
16+
private Long salary;
17+
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.baeldung.spring.data.jpa.repository;
2+
3+
import com.baeldung.spring.data.jpa.entity.Employee;
4+
import java.util.List;
5+
import net.bytebuddy.TypeCache.Sort;
6+
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.Query;
8+
import org.springframework.data.repository.query.Param;
9+
10+
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
11+
12+
@Query(value = "SELECT e FROM Employee e")
13+
List<Employee> findAllEmployees(Sort sort);
14+
15+
@Query("SELECT e FROM Employee e WHERE e.salary = ?1")
16+
Employee findAllEmployeesWithSalary(Long salary);
17+
18+
@Query("SELECT e FROM Employee e WHERE e.name = ?1 and e.salary = ?2")
19+
Employee findUserByNameAndSalary(String name, Long salary);
20+
21+
@Query(
22+
value = "SELECT * FROM Employee e WHERE e.salary = ?1",
23+
nativeQuery = true)
24+
Employee findUserBySalaryNative(Long salary);
25+
26+
@Query("SELECT e FROM Employee e WHERE e.name = :name and e.salary = :salary")
27+
Employee findUserByEmployeeNameAndSalaryNamedParameters(
28+
@Param("name") String employeeName,
29+
@Param("salary") Long employeeSalary);
30+
31+
@Query(value = "SELECT * FROM Employee e WHERE e.name = :name and e.salary = :salary",
32+
nativeQuery = true)
33+
Employee findUserByNameAndSalaryNamedParamsNative(
34+
@Param("name") String employeeName,
35+
@Param("salary") Long employeeSalary);
36+
37+
}

0 commit comments

Comments
 (0)