CCM NG: Variante der findById Methode für fetchJoins erstellen erstellen (#2805)
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5254 8810af33-2d31-482b-a856-94f89814c4df
parent
756e317b92
commit
13260cd7cd
|
|
@ -28,6 +28,7 @@ import java.util.Optional;
|
|||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityGraph;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.NoResultException;
|
||||
import javax.persistence.TypedQuery;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
|
|
@ -123,12 +124,12 @@ public abstract class AbstractEntityRepository<K, E> implements Serializable {
|
|||
* repository.
|
||||
*/
|
||||
public abstract Class<E> getEntityClass();
|
||||
|
||||
|
||||
/**
|
||||
* Used by some methods to create queries using the JPA Criteria API.
|
||||
*
|
||||
* @return The name of the ID attribute/property for entities managed by
|
||||
* a repository.
|
||||
*
|
||||
* @return The name of the ID attribute/property for entities managed by a
|
||||
* repository.
|
||||
*/
|
||||
public abstract String getIdAttributeName();
|
||||
|
||||
|
|
@ -176,6 +177,32 @@ public abstract class AbstractEntityRepository<K, E> implements Serializable {
|
|||
hints));
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public Optional<E> findById(final K entityId,
|
||||
final String... fetchJoins) {
|
||||
|
||||
Objects.requireNonNull(entityId);
|
||||
|
||||
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||
final CriteriaQuery<E> criteriaQuery = builder
|
||||
.createQuery(getEntityClass());
|
||||
final Root<E> from = criteriaQuery.from(getEntityClass());
|
||||
criteriaQuery.from(getEntityClass());
|
||||
for (final String fetchJoin : fetchJoins) {
|
||||
from.fetch(fetchJoin);
|
||||
}
|
||||
|
||||
criteriaQuery
|
||||
.where(builder.equal(from.get(getIdAttributeName()), entityId));
|
||||
|
||||
final TypedQuery<E> query = entityManager.createQuery(criteriaQuery);
|
||||
try {
|
||||
return Optional.of(query.getSingleResult());
|
||||
} catch (NoResultException ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds all instances of the entity of the type this repository is
|
||||
* responsible for.
|
||||
|
|
|
|||
Loading…
Reference in New Issue