Update the repositories to solve the N+1 problem.
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
+2
-2
@@ -3,7 +3,7 @@ package space.kklochko.jpa_hospital_example.db.repositories;
|
|||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
@@ -18,7 +18,7 @@ public abstract class AbstractRepository<T> {
|
|||||||
|
|
||||||
public abstract T read(UUID id);
|
public abstract T read(UUID id);
|
||||||
|
|
||||||
public abstract ArrayList<T> readAll();
|
public abstract List<T> readAll();
|
||||||
|
|
||||||
public abstract boolean update(T object);
|
public abstract boolean update(T object);
|
||||||
|
|
||||||
|
|||||||
+24
-4
@@ -1,13 +1,15 @@
|
|||||||
package space.kklochko.jpa_hospital_example.db.repositories;
|
package space.kklochko.jpa_hospital_example.db.repositories;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityGraph;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import jakarta.persistence.TypedQuery;
|
import jakarta.persistence.TypedQuery;
|
||||||
import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert;
|
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.TransactionalRemove;
|
||||||
import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalUpdate;
|
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.Department;
|
||||||
|
import space.kklochko.jpa_hospital_example.models.Patient;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class DepartmentRepository extends AbstractRepository<Department> {
|
public class DepartmentRepository extends AbstractRepository<Department> {
|
||||||
@@ -25,10 +27,28 @@ public class DepartmentRepository extends AbstractRepository<Department> {
|
|||||||
return manager.find(Department.class, id);
|
return manager.find(Department.class, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Department> readAll() {
|
public List<Department> readAll() {
|
||||||
TypedQuery<Department> query = manager.createQuery("SELECT d FROM Department d", Department.class);
|
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) {
|
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.db.repositories.blocks.TransactionalUpdate;
|
||||||
import space.kklochko.jpa_hospital_example.models.Indicator;
|
import space.kklochko.jpa_hospital_example.models.Indicator;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class IndicatorRepository extends AbstractRepository<Indicator> {
|
public class IndicatorRepository extends AbstractRepository<Indicator> {
|
||||||
@@ -25,10 +25,10 @@ public class IndicatorRepository extends AbstractRepository<Indicator> {
|
|||||||
return manager.find(Indicator.class, id);
|
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);
|
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) {
|
public boolean update(Indicator object) {
|
||||||
|
|||||||
+9
-4
@@ -1,5 +1,6 @@
|
|||||||
package space.kklochko.jpa_hospital_example.db.repositories;
|
package space.kklochko.jpa_hospital_example.db.repositories;
|
||||||
|
|
||||||
|
import jakarta.persistence.EntityGraph;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import jakarta.persistence.TypedQuery;
|
import jakarta.persistence.TypedQuery;
|
||||||
import space.kklochko.jpa_hospital_example.db.repositories.blocks.TransactionalInsert;
|
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.db.repositories.blocks.TransactionalUpdate;
|
||||||
import space.kklochko.jpa_hospital_example.models.Patient;
|
import space.kklochko.jpa_hospital_example.models.Patient;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class PatientRepository extends AbstractRepository<Patient> {
|
public class PatientRepository extends AbstractRepository<Patient> {
|
||||||
@@ -25,10 +26,14 @@ public class PatientRepository extends AbstractRepository<Patient> {
|
|||||||
return manager.find(Patient.class, id);
|
return manager.find(Patient.class, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Patient> readAll() {
|
public List<Patient> readAll() {
|
||||||
TypedQuery<Patient> query = manager.createQuery("SELECT p FROM Patient p", Patient.class);
|
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) {
|
public boolean update(Patient object) {
|
||||||
|
|||||||
Reference in New Issue
Block a user