Update the repositories to solve the N+1 problem.
This commit is contained in:
+2
-2
@@ -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<T> {
|
||||
|
||||
public abstract T read(UUID id);
|
||||
|
||||
public abstract ArrayList<T> readAll();
|
||||
public abstract List<T> readAll();
|
||||
|
||||
public abstract boolean update(T object);
|
||||
|
||||
|
||||
+24
-4
@@ -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<Department> {
|
||||
@@ -25,10 +27,28 @@ public class DepartmentRepository extends AbstractRepository<Department> {
|
||||
return manager.find(Department.class, id);
|
||||
}
|
||||
|
||||
public ArrayList<Department> readAll() {
|
||||
TypedQuery<Department> query = manager.createQuery("SELECT d FROM Department d", Department.class);
|
||||
public List<Department> readAll() {
|
||||
EntityGraph<Department> entityGraph = manager.createEntityGraph(Department.class);
|
||||
entityGraph.addAttributeNodes("patients");
|
||||
//entityGraph.addSubgraph("patients")
|
||||
//.addAttributeNodes("indicators");
|
||||
|
||||
return (ArrayList<Department>) query.getResultList();
|
||||
TypedQuery<Department> query = manager.createQuery("SELECT d FROM Department d", Department.class);
|
||||
query.setHint( "javax.persistence.fetchgraph", entityGraph);
|
||||
|
||||
List<Department> departments = query.getResultList();
|
||||
|
||||
for(Department department : departments) {
|
||||
EntityGraph<Patient> patientEntityGraph = manager.createEntityGraph(Patient.class);
|
||||
patientEntityGraph.addAttributeNodes("indicators");
|
||||
|
||||
TypedQuery<Patient> patientQuery = manager.createQuery("SELECT p FROM Patient p", Patient.class);
|
||||
patientQuery.setHint( "javax.persistence.fetchgraph", patientEntityGraph);
|
||||
|
||||
department.setPatients(patientQuery.getResultList());
|
||||
}
|
||||
|
||||
return departments;
|
||||
}
|
||||
|
||||
public boolean update(Department object) {
|
||||
|
||||
+3
-3
@@ -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<Indicator> {
|
||||
@@ -25,10 +25,10 @@ public class IndicatorRepository extends AbstractRepository<Indicator> {
|
||||
return manager.find(Indicator.class, id);
|
||||
}
|
||||
|
||||
public ArrayList<Indicator> readAll() {
|
||||
public List<Indicator> readAll() {
|
||||
TypedQuery<Indicator> query = manager.createQuery("SELECT i FROM Indicator i", Indicator.class);
|
||||
|
||||
return (ArrayList<Indicator>) query.getResultList();
|
||||
return query.getResultList();
|
||||
}
|
||||
|
||||
public boolean update(Indicator object) {
|
||||
|
||||
+9
-4
@@ -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<Patient> {
|
||||
@@ -25,10 +26,14 @@ public class PatientRepository extends AbstractRepository<Patient> {
|
||||
return manager.find(Patient.class, id);
|
||||
}
|
||||
|
||||
public ArrayList<Patient> readAll() {
|
||||
TypedQuery<Patient> query = manager.createQuery("SELECT p FROM Patient p", Patient.class);
|
||||
public List<Patient> readAll() {
|
||||
EntityGraph<Patient> entityGraph = manager.createEntityGraph(Patient.class);
|
||||
entityGraph.addAttributeNodes("indicators");
|
||||
|
||||
return (ArrayList<Patient>) query.getResultList();
|
||||
TypedQuery<Patient> query = manager.createQuery("SELECT p FROM Patient p", Patient.class);
|
||||
query.setHint( "javax.persistence.fetchgraph", entityGraph);
|
||||
|
||||
return query.getResultList();
|
||||
}
|
||||
|
||||
public boolean update(Patient object) {
|
||||
|
||||
Reference in New Issue
Block a user