diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/AbstractRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/AbstractRepository.java index f4a4d91..013e667 100644 --- a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/AbstractRepository.java +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/AbstractRepository.java @@ -3,7 +3,7 @@ package space.kklochko.jpa_hospital_example.db.repositories; import jakarta.persistence.EntityManager; import lombok.Setter; -import java.util.ArrayList; +import java.util.List; import java.util.UUID; @Setter @@ -18,7 +18,7 @@ public abstract class AbstractRepository { public abstract T read(UUID id); - public abstract ArrayList readAll(); + public abstract List readAll(); public abstract boolean update(T object); diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java index 9a9ba5e..e8908a8 100644 --- a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/DepartmentRepository.java @@ -1,13 +1,15 @@ package space.kklochko.jpa_hospital_example.db.repositories; +import jakarta.persistence.EntityGraph; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert; import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalRemove; import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate; import space.kklochko.jpa_hospital_example.models.Department; +import space.kklochko.jpa_hospital_example.models.Patient; -import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class DepartmentRepository extends AbstractRepository { @@ -25,10 +27,28 @@ public class DepartmentRepository extends AbstractRepository { return manager.find(Department.class, id); } - public ArrayList readAll() { + public List readAll() { + EntityGraph entityGraph = manager.createEntityGraph(Department.class); + entityGraph.addAttributeNodes("patients"); + //entityGraph.addSubgraph("patients") + //.addAttributeNodes("indicators"); + TypedQuery query = manager.createQuery("SELECT d FROM Department d", Department.class); + query.setHint( "javax.persistence.fetchgraph", entityGraph); + + List departments = query.getResultList(); + + for(Department department : departments) { + EntityGraph patientEntityGraph = manager.createEntityGraph(Patient.class); + patientEntityGraph.addAttributeNodes("indicators"); + + TypedQuery patientQuery = manager.createQuery("SELECT p FROM Patient p", Patient.class); + patientQuery.setHint( "javax.persistence.fetchgraph", patientEntityGraph); + + department.setPatients(patientQuery.getResultList()); + } - return (ArrayList) query.getResultList(); + return departments; } public boolean update(Department object) { diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java index 9cd6772..2a7c5d1 100644 --- a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/IndicatorRepository.java @@ -7,7 +7,7 @@ import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalR import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate; import space.kklochko.jpa_hospital_example.models.Indicator; -import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class IndicatorRepository extends AbstractRepository { @@ -25,10 +25,10 @@ public class IndicatorRepository extends AbstractRepository { return manager.find(Indicator.class, id); } - public ArrayList readAll() { + public List readAll() { TypedQuery query = manager.createQuery("SELECT i FROM Indicator i", Indicator.class); - return (ArrayList) query.getResultList(); + return query.getResultList(); } public boolean update(Indicator object) { diff --git a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java index 1bb5efe..be3547a 100644 --- a/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java +++ b/src/main/java/space/kklochko/jpa_hospital_example/db/repositories/PatientRepository.java @@ -1,5 +1,6 @@ package space.kklochko.jpa_hospital_example.db.repositories; +import jakarta.persistence.EntityGraph; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert; @@ -7,7 +8,7 @@ import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalR import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate; import space.kklochko.jpa_hospital_example.models.Patient; -import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class PatientRepository extends AbstractRepository { @@ -25,10 +26,14 @@ public class PatientRepository extends AbstractRepository { return manager.find(Patient.class, id); } - public ArrayList readAll() { + public List readAll() { + EntityGraph entityGraph = manager.createEntityGraph(Patient.class); + entityGraph.addAttributeNodes("indicators"); + TypedQuery query = manager.createQuery("SELECT p FROM Patient p", Patient.class); + query.setHint( "javax.persistence.fetchgraph", entityGraph); - return (ArrayList) query.getResultList(); + return query.getResultList(); } public boolean update(Patient object) {