* BAEL-7490 read write file in separate thread

* Change the to try resources

* Update the code to sync with article

* added new module for get list entity in hibernate

* Move the code to hibernate-queries module

* simplify the code
This commit is contained in:
Wynn Teo 2024-03-27 09:19:44 +08:00 committed by GitHub
parent c25f863bb2
commit c957410b7e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 169 additions and 0 deletions

View File

@ -0,0 +1,40 @@
package com.baeldung.hibernate.listentity.entity;
import java.util.List;
import jakarta.persistence.*;
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department", fetch = FetchType.EAGER)
private List<Employee> employees;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}

View File

@ -0,0 +1,41 @@
package com.baeldung.hibernate.listentity.entity;
import jakarta.persistence.*;
@Entity
@NamedQuery(name = "findAllEmployees", query = "SELECT e FROM Employee e")
@NamedQuery(name = "findEmployeesByDepartment", query = "SELECT e FROM Employee e WHERE e.department = :department ORDER BY e.lastName ASC")
public class Employee {
@Id
@GeneratedValue
private Long id;
private String lastName;
private String department;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}

View File

@ -0,0 +1,88 @@
package com.baeldung.hibernate.listentity.service;
import java.util.Collections;
import java.util.List;
import jakarta.persistence.*;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Path;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import com.baeldung.hibernate.listentity.entity.Department;
import com.baeldung.hibernate.listentity.entity.Employee;
@Service
public class EmployeeService {
@PersistenceContext
private EntityManager entityManager;
public List<Employee> getAllEmployeesUsingJPQL() {
String jpqlQuery = "SELECT e FROM Employee e";
Query query = entityManager.createQuery(jpqlQuery, Employee.class);
return query.getResultList();
}
public List<Employee> getAllEmployeesByDepartmentUsingJPQL() {
String jpqlQuery = "SELECT e FROM Employee e WHERE e.department = 'Engineering' ORDER BY e.lastName ASC";
Query query = entityManager.createQuery(jpqlQuery, Employee.class);
return query.getResultList();
}
public List<Employee> getAllEmployeesUsingNamedQuery() {
Query query = entityManager.createNamedQuery("findAllEmployees", Employee.class);
return query.getResultList();
}
public List<Employee> getAllEmployeesByDepartmentUsingNamedQuery(String department) {
Query query = entityManager.createNamedQuery("findEmployeesByDepartment", Employee.class);
query.setParameter("department", department);
return query.getResultList();
}
public List<Employee> getAllEmployeesUsingCriteriaAPI() {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class);
Root<Employee> employeeRoot = criteriaQuery.from(Employee.class);
criteriaQuery.select(employeeRoot);
Query query = entityManager.createQuery(criteriaQuery);
return query.getResultList();
}
public List<Employee> getAllEmployeesByDepartmentUsingCriteriaAPI(String department) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class);
Root<Employee> employeeRoot = criteriaQuery.from(Employee.class);
Predicate departmentPredicate = criteriaBuilder.equal(employeeRoot.get("department"), department);
Path<Object> sortByPath = employeeRoot.get("lastName");
criteriaQuery.orderBy(criteriaBuilder.asc(sortByPath));
criteriaQuery.select(employeeRoot)
.where(departmentPredicate);
Query query = entityManager.createQuery(criteriaQuery);
return query.getResultList();
}
public List<Employee> getAllEmployeesByDepartmentUsingOneToManyAnnotations(String departmentName) {
try {
// Retrieve the department by its name
Department department = entityManager.createQuery("SELECT d FROM Department d WHERE d.name = :name", Department.class)
.setParameter("name", departmentName)
.getSingleResult();
// Return the list of employees associated with the department
return department.getEmployees();
} catch (NoResultException e) {
return Collections.emptyList();
}
}
}