Migrate the model repositories.

This commit is contained in:
2023-11-06 21:41:04 +02:00
parent 736aa2c530
commit 3f4896349a
14 changed files with 213 additions and 541 deletions
@@ -0,0 +1,47 @@
package space.kklochko.jpa_hospital_example.db.repositories;
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 java.util.ArrayList;
import java.util.UUID;
public class DepartmentRepository extends AbstractRepository<Department> {
public DepartmentRepository(EntityManager manager){
super(manager);
}
public boolean create(Department object) {
TransactionalInsert insert = new TransactionalInsert();
return insert.run(manager, object);
}
public Department read(UUID id) {
return manager.find(Department.class, id);
}
public ArrayList<Department> readAll() {
TypedQuery<Department> query = manager.createQuery("SELECT d FROM Department d", Department.class);
return (ArrayList<Department>) query.getResultList();
}
public boolean update(Department object) {
TransactionalUpdate update = new TransactionalUpdate();
return update.run(manager, object);
}
public boolean delete(UUID id) {
Department object = read(id);
TransactionalRemove remove = new TransactionalRemove();
return remove.run(manager, object);
}
}
@@ -0,0 +1,47 @@
package space.kklochko.jpa_hospital_example.db.repositories;
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.Indicator;
import java.util.ArrayList;
import java.util.UUID;
public class IndicatorRepository extends AbstractRepository<Indicator> {
public IndicatorRepository(EntityManager manager){
super(manager);
}
public boolean create(Indicator object) {
TransactionalInsert insert = new TransactionalInsert();
return insert.run(manager, object);
}
public Indicator read(UUID id) {
return manager.find(Indicator.class, id);
}
public ArrayList<Indicator> readAll() {
TypedQuery<Indicator> query = manager.createQuery("SELECT i FROM Indicator i", Indicator.class);
return (ArrayList<Indicator>) query.getResultList();
}
public boolean update(Indicator object) {
TransactionalUpdate update = new TransactionalUpdate();
return update.run(manager, object);
}
public boolean delete(UUID id) {
Indicator object = read(id);
TransactionalRemove remove = new TransactionalRemove();
return remove.run(manager, object);
}
}
@@ -0,0 +1,47 @@
package space.kklochko.jpa_hospital_example.db.repositories;
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.Patient;
import java.util.ArrayList;
import java.util.UUID;
public class PatientRepository extends AbstractRepository<Patient> {
public PatientRepository(EntityManager manager) {
super(manager);
}
public boolean create(Patient object) {
TransactionalInsert insert = new TransactionalInsert();
return insert.run(manager, object);
}
public Patient read(UUID id) {
return manager.find(Patient.class, id);
}
public ArrayList<Patient> readAll() {
TypedQuery<Patient> query = manager.createQuery("SELECT p FROM Patient p", Patient.class);
return (ArrayList<Patient>) query.getResultList();
}
public boolean update(Patient object) {
TransactionalUpdate update = new TransactionalUpdate();
return update.run(manager, object);
}
public boolean delete(UUID id) {
Patient object = read(id);
TransactionalRemove remove = new TransactionalRemove();
return remove.run(manager, object);
}
}
@@ -0,0 +1,29 @@
package space.kklochko.jpa_hospital_example.db.repositories.blocks;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceException;
import jakarta.persistence.RollbackException;
import space.kklochko.jpa_hospital_example.models.Department;
import space.kklochko.jpa_hospital_example.models.Indicator;
import space.kklochko.jpa_hospital_example.models.Patient;
import java.util.UUID;
public class TransactionalInsert {
public <T> boolean run(EntityManager manager, T object) {
try {
if (!manager.getTransaction().isActive())
manager.getTransaction().begin();
manager.persist(object);
manager.getTransaction().commit();
return true;
} catch (PersistenceException e){
if (manager.getTransaction().isActive()) {
manager.getTransaction().rollback();
}
return (new TransactionalUpdate()).run(manager, object);
}
}
}
@@ -0,0 +1,23 @@
package space.kklochko.jpa_hospital_example.db.repositories.blocks;
import jakarta.persistence.EntityManager;
import jakarta.persistence.RollbackException;
public class TransactionalRemove {
public <T> boolean run(EntityManager manager, T object) {
if(object == null)
return false;
try {
manager.getTransaction().begin();
manager.remove(object);
manager.getTransaction().commit();
return true;
} catch (RollbackException e) {
if (manager.getTransaction().isActive()) {
manager.getTransaction().rollback();
}
return false;
}
}
}
@@ -0,0 +1,20 @@
package space.kklochko.jpa_hospital_example.db.repositories.blocks;
import jakarta.persistence.EntityManager;
import jakarta.persistence.RollbackException;
public class TransactionalUpdate {
public <T> boolean run(EntityManager manager, T object) {
try {
manager.getTransaction().begin();
manager.merge(object);
manager.getTransaction().commit();
return true;
} catch (RollbackException e) {
if (manager.getTransaction().isActive()) {
manager.getTransaction().rollback();
}
return false;
}
}
}