From 56cdbaa03bb58df749756ee933f6067d3091e074 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 24 Dec 2022 14:11:18 +0100 Subject: [PATCH] Additional query method --- .../java/org/libreccm/core/CcmObject.java | 4 ++- .../libreccm/core/CcmObjectIdResolver.java | 24 +++++++-------- .../libreccm/core/CcmObjectRepository.java | 29 ++++++++++++++++--- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/core/CcmObject.java b/ccm-core/src/main/java/org/libreccm/core/CcmObject.java index 175fa482f..d71e58534 100644 --- a/ccm-core/src/main/java/org/libreccm/core/CcmObject.java +++ b/ccm-core/src/main/java/org/libreccm/core/CcmObject.java @@ -83,7 +83,9 @@ import javax.persistence.Table; @NamedQuery(name = "CcmObject.findById", query = "SELECT o FROM CcmObject o WHERE o.objectId = :id"), @NamedQuery(name = "CcmObject.findByUuid", - query = "SELECT o FROM CcmObject o WHERE o.uuid = :uuid") + query = "SELECT o FROM CcmObject o WHERE o.uuid = :uuid"), + @NamedQuery(name = "CcmObject.findFirstByUuid", + query = "SELECT o FROM CcmObject o WHERE o.uuid = :uuid ORDER BY objectId") }) @XmlRootElement(name = "ccm-object", namespace = CORE_XML_NS) //False warning (?). Because this class has been migrated from the old PDL style diff --git a/ccm-core/src/main/java/org/libreccm/core/CcmObjectIdResolver.java b/ccm-core/src/main/java/org/libreccm/core/CcmObjectIdResolver.java index ec7b252ef..c82fab5da 100644 --- a/ccm-core/src/main/java/org/libreccm/core/CcmObjectIdResolver.java +++ b/ccm-core/src/main/java/org/libreccm/core/CcmObjectIdResolver.java @@ -53,19 +53,19 @@ public class CcmObjectIdResolver implements Serializable, ObjectIdResolver { @Override public Object resolveId(final ObjectIdGenerator.IdKey id) { try { - return CdiUtil - .createCdiUtil() - .findBean(CcmObjectRepository.class) - .findObjectByUuid(id.key.toString()) - .orElseThrow( - () -> new IllegalArgumentException( - String.format( - "No CcmObject with UUID %s in the database.", - id.key.toString() + return CdiUtil + .createCdiUtil() + .findBean(CcmObjectRepository.class) + .findFirstObjectByUuid(id.key.toString()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No CcmObject with UUID %s in the database.", + id.key.toString() + ) ) - ) - ); - } catch(NonUniqueResultException ex) { + ); + } catch (NonUniqueResultException ex) { throw new UnexpectedErrorException( String.format( "Found more than one result for UUID %s.", diff --git a/ccm-core/src/main/java/org/libreccm/core/CcmObjectRepository.java b/ccm-core/src/main/java/org/libreccm/core/CcmObjectRepository.java index 82130a45c..4d1b9d0fb 100644 --- a/ccm-core/src/main/java/org/libreccm/core/CcmObjectRepository.java +++ b/ccm-core/src/main/java/org/libreccm/core/CcmObjectRepository.java @@ -28,6 +28,7 @@ import java.util.UUID; import static org.libreccm.core.CoreConstants.ACCESS_DENIED; +import java.util.List; /** * A repository class for {@link CcmObject} entities. @@ -45,17 +46,17 @@ import static org.libreccm.core.CoreConstants.ACCESS_DENIED; public class CcmObjectRepository extends AbstractEntityRepository { private static final long serialVersionUID = 5033157795875521195L; - + @Override public Class getEntityClass() { return CcmObject.class; } - + @Override public String getIdAttributeName() { return "objectId"; } - + @Override public Long getIdOfEntity(final CcmObject entity) { return entity.getObjectId(); @@ -98,7 +99,7 @@ public class CcmObjectRepository extends AbstractEntityRepository findFirstObjectByUuid(final String uuid) { + final TypedQuery query = getEntityManager().createNamedQuery( + "CcmObject.findFirstByUuid", CcmObject.class); + query.setParameter("uuid", uuid); + + final List result = query.getResultList(); + if (result.isEmpty()) { + return Optional.empty(); + } else { + return Optional.of(result.get(0)); + } + } + @Transactional(Transactional.TxType.REQUIRED) @Override public void delete(final CcmObject object) {