JpaCrudRepository.java
package io.extact.rms.application.persistence.jpa;
import java.util.List;
import io.extact.rms.application.domain.IdAccessable;
import io.extact.rms.application.domain.constraint.ValidationGroups.Add;
import io.extact.rms.application.domain.constraint.ValidationGroups.Update;
import io.extact.rms.application.persistence.GenericRepository;
import io.extact.rms.platform.validate.ValidateGroup;
import io.extact.rms.platform.validate.ValidateParam;
import jakarta.persistence.EntityManager;
import jakarta.validation.Valid;
public abstract class JpaCrudRepository<T extends IdAccessable> implements GenericRepository<T> {
@Override
public T get(int id) {
return this.getEntityManage().find(this.getTargetClass(), id);
}
@Override
public List<T> findAll() {
var jpql = "select e from " + this.getTargetClass().getSimpleName() + " e order by e.id";
return this.getEntityManage().createQuery(jpql, this.getTargetClass())
.getResultList();
}
@ValidateParam
@ValidateGroup(groups = Add.class)
@Override
public void add(@Valid T entity) {
this.getEntityManage().persist(entity);
this.getEntityManage().flush();
}
@ValidateParam
@ValidateGroup(groups = Update.class)
@Override
public T update(@Valid T entity) {
if (!this.getEntityManage().contains(entity) && get(entity.getId()) == null) {
return null;
}
var updated = this.getEntityManage().merge(entity);
this.getEntityManage().flush();
return updated;
}
@Override
public void delete(T entity) {
this.getEntityManage().remove(entity);
this.getEntityManage().flush();
}
protected abstract EntityManager getEntityManage();
protected abstract Class<T> getTargetClass();
}