Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gnobroga/jpa-criteria

Aprendendo mais sobre a JPA Criteria API, estou utilizando o ORM Hibernate, com alguns relacionamentos, classes embeddables e heranças com discriminadores
https://github.com/gnobroga/jpa-criteria

Last synced: 14 days ago
JSON representation

Aprendendo mais sobre a JPA Criteria API, estou utilizando o ORM Hibernate, com alguns relacionamentos, classes embeddables e heranças com discriminadores

Awesome Lists containing this project

README

        

# JPA Criteria API

Para realizar alguns testes, criei este DAO genérico com métodos fluentes para iniciar uma transação, adicionar registros, buscar por ID e realizar consultas JPQL parametrizadas.

```java
public class GenericDAO {

private Class clazz;

private final EntityManager em;

public GenericDAO(Class clazz, EntityManager em) {
this.clazz = clazz;
this.em = em;
}

public GenericDAO startTransaction() {
em.getTransaction().begin();
return this;
}

public GenericDAO commit() {
em.getTransaction().commit();
return this;
}

public GenericDAO rollback() {
em.getTransaction().rollback();
return this;
}

public GenericDAO save(E object) {
em.persist(object);
return this;
}

public Optional findById(Object id) {
if (Objects.isNull(id)) return Optional.empty();
return Optional.ofNullable(em.find(clazz, id));
}

public List findAll() {
String jpql = "from %s e".formatted(this.clazz.getName());
TypedQuery query = em.createQuery(jpql, clazz);
List result = query.getResultList();
return Objects.isNull(result) ? new ArrayList<>() : result;
}

public List findByParameters(String jpql, Map parameters) {
try {
var query = em.createQuery(jpql, clazz);
for (Map.Entry param: parameters.entrySet()) {
query.setParameter(param.getKey(), param.getValue());
}
return query.getResultList();
} catch (IllegalArgumentException e) {
e.printStackTrace();
return Collections.emptyList();
}
}

}

```

## Tecnologias

* Hibernate

* Java

* Postgres