diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java index e8fdabebbc..c75f8e358f 100644 --- a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java +++ b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java @@ -1,12 +1,10 @@ package com.baeldung.hibernate; -import com.baeldung.hibernate.pessimisticlocking.Individual; -import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingCourse; -import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingEmployee; -import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingStudent; -import com.baeldung.hibernate.pojo.*; -import com.baeldung.hibernate.pojo.Person; -import com.baeldung.hibernate.pojo.inheritance.*; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.Properties; + import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import org.hibernate.boot.Metadata; @@ -14,10 +12,34 @@ import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.service.ServiceRegistry; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.URL; -import java.util.Properties; +import com.baeldung.hibernate.pessimisticlocking.Individual; +import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingCourse; +import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingEmployee; +import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingStudent; +import com.baeldung.hibernate.pojo.Course; +import com.baeldung.hibernate.pojo.Employee; +import com.baeldung.hibernate.pojo.EntityDescription; +import com.baeldung.hibernate.pojo.OrderEntry; +import com.baeldung.hibernate.pojo.OrderEntryIdClass; +import com.baeldung.hibernate.pojo.OrderEntryPK; +import com.baeldung.hibernate.pojo.Person; +import com.baeldung.hibernate.pojo.Phone; +import com.baeldung.hibernate.pojo.PointEntity; +import com.baeldung.hibernate.pojo.PolygonEntity; +import com.baeldung.hibernate.pojo.Product; +import com.baeldung.hibernate.pojo.Student; +import com.baeldung.hibernate.pojo.TemporalValues; +import com.baeldung.hibernate.pojo.User; +import com.baeldung.hibernate.pojo.UserProfile; +import com.baeldung.hibernate.pojo.inheritance.Animal; +import com.baeldung.hibernate.pojo.inheritance.Bag; +import com.baeldung.hibernate.pojo.inheritance.Book; +import com.baeldung.hibernate.pojo.inheritance.Car; +import com.baeldung.hibernate.pojo.inheritance.MyEmployee; +import com.baeldung.hibernate.pojo.inheritance.MyProduct; +import com.baeldung.hibernate.pojo.inheritance.Pen; +import com.baeldung.hibernate.pojo.inheritance.Pet; +import com.baeldung.hibernate.pojo.inheritance.Vehicle; public class HibernateUtil { private static SessionFactory sessionFactory; @@ -70,6 +92,8 @@ public class HibernateUtil { metadataSources.addAnnotatedClass(PessimisticLockingCourse.class); metadataSources.addAnnotatedClass(com.baeldung.hibernate.pessimisticlocking.Customer.class); metadataSources.addAnnotatedClass(com.baeldung.hibernate.pessimisticlocking.Address.class); + metadataSources.addAnnotatedClass(com.baeldung.hibernate.entities.Manager.class); + metadataSources.addAnnotatedClass(com.baeldung.hibernate.entities.Department.class); Metadata metadata = metadataSources.buildMetadata(); return metadata.getSessionFactoryBuilder() diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/entities/Department.java b/hibernate5/src/main/java/com/baeldung/hibernate/entities/Department.java index fec7b04462..ceabfc742e 100644 --- a/hibernate5/src/main/java/com/baeldung/hibernate/entities/Department.java +++ b/hibernate5/src/main/java/com/baeldung/hibernate/entities/Department.java @@ -5,7 +5,6 @@ import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; -import javax.persistence.Table; @Entity public class Department { @@ -13,7 +12,12 @@ public class Department { long id; String name; @OneToMany(mappedBy="department") - List employees; + List employees; + + public Department(String name) { + this.name = name; + } + public long getId() { return id; } @@ -26,10 +30,10 @@ public class Department { public void setName(String name) { this.name = name; } - public List getEmployees() { + public List getEmployees() { return employees; } - public void setEmployees(List employees) { + public void setEmployees(List employees) { this.employees = employees; } } diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/entities/Employee.java b/hibernate5/src/main/java/com/baeldung/hibernate/entities/Manager.java similarity index 78% rename from hibernate5/src/main/java/com/baeldung/hibernate/entities/Employee.java rename to hibernate5/src/main/java/com/baeldung/hibernate/entities/Manager.java index eec7c54d93..d9d8e8d40f 100644 --- a/hibernate5/src/main/java/com/baeldung/hibernate/entities/Employee.java +++ b/hibernate5/src/main/java/com/baeldung/hibernate/entities/Manager.java @@ -3,18 +3,22 @@ package com.baeldung.hibernate.entities; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; -import javax.persistence.Table; @Entity -public class Employee { +public class Manager { @Id long id; String employeeNumber; String name; - String designation; @ManyToOne Department department; + public Manager(String name, String employeeNumber, Department department) { + this.name = name; + this.employeeNumber = employeeNumber; + this.department = department; + } + public long getId() { return id; } @@ -33,12 +37,6 @@ public class Employee { public void setName(String name) { this.name = name; } - public String getDesignation() { - return designation; - } - public void setDesignation(String designation) { - this.designation = designation; - } public Department getDepartment() { return department; } diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Result.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Result.java index 6893060dd8..588a895c14 100644 --- a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Result.java +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Result.java @@ -9,6 +9,9 @@ public class Result { this.departmentName = departmentName; } + public Result() { + } + public String getEmployeeName() { return employeeName; } diff --git a/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java b/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java index c2ccef5c85..622063b828 100644 --- a/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java +++ b/hibernate5/src/test/java/com/baeldung/hibernate/CustomClassIntegrationTest.java @@ -1,18 +1,19 @@ package com.baeldung.hibernate; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; import java.util.List; -import java.util.TimeZone; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.Query; -import org.junit.Before; +import org.hibernate.transform.Transformers; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.baeldung.hibernate.entities.Department; +import com.baeldung.hibernate.entities.Manager; import com.baeldung.hibernate.pojo.Result; class CustomClassIntegrationTest { @@ -25,23 +26,50 @@ class CustomClassIntegrationTest { public void setUp() throws IOException { session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); - session.createNativeQuery("delete from emp").executeUpdate(); - session.createNativeQuery("delete from dept").executeUpdate(); + session.createNativeQuery("delete from manager").executeUpdate(); + session.createNativeQuery("delete from department").executeUpdate(); + Department department = new Department("Sales"); + Manager employee = new Manager("John Smith", "001", department); + session.persist(department); + session.persist(employee); transaction.commit(); transaction = session.beginTransaction(); } @Test - public void whenAllEmployeesSelected_ThenObjectGraphReturned() { - @SuppressWarnings("unchecked") - Query query = session.createQuery("from Employee"); - List employees = query.list(); + public void whenAllManagersAreSelected_ThenObjectGraphIsReturned() { + Query query = session.createQuery("from com.baeldung.hibernate.entities.Manager"); + List managers = query.list(); + Manager manager = managers.get(0); + assertEquals("John Smith", manager.getName()); + assertEquals("Sales", manager.getDepartment().getName()); } - @Test - public void whenResultConstructorInSelect_ThenListOfResultReturned() { - Query query = session.createQuery("select new Result(e.name, e.department.name) from Employee e"); - List employees = query.list(); + public void whenIndividualPropertiesAreSelected_ThenObjectArrayIsReturned() { + Query query = session.createQuery("select m.name, m.department.name from com.baeldung.hibernate.entities.Manager m"); + List managers = query.list(); + Object[] manager = (Object[]) managers.get(0); + assertEquals("John Smith", manager[0]); + assertEquals("Sales", manager[1]); + } + + @Test + public void whenResultConstructorInSelect_ThenListOfResultIsReturned() { + Query query = session.createQuery("select new com.baeldung.hibernate.pojo.Result(m.name, m.department.name) from Manager m"); + List results = query.list(); + Result result = results.get(0); + assertEquals("John Smith", result.getEmployeeName()); + assertEquals("Sales", result.getDepartmentName()); + } + + @Test + public void whenResultTransformerOnQuery_ThenListOfResultIsReturned() { + Query query = session.createQuery("select m.name as employeeName, m.department.name as departmentName from com.baeldung.hibernate.entities.Manager m"); + query.setResultTransformer(Transformers.aliasToBean(Result.class)); + List results = query.list(); + Result result = results.get(0); + assertEquals("John Smith", result.getEmployeeName()); + assertEquals("Sales", result.getDepartmentName()); } }